<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8"/>
    <title id="head-title">ihrmReport.html</title>
      <style type="text/css">body {
  font-family: Helvetica, Arial, sans-serif;
  font-size: 12px;
  /* do not increase min-width as some may use split screens */
  min-width: 800px;
  color: #999;
}

h1 {
  font-size: 24px;
  color: black;
}

h2 {
  font-size: 16px;
  color: black;
}

p {
  color: black;
}

a {
  color: #999;
}

table {
  border-collapse: collapse;
}

/******************************
 * SUMMARY INFORMATION
 ******************************/
#environment td {
  padding: 5px;
  border: 1px solid #e6e6e6;
  vertical-align: top;
}
#environment tr:nth-child(odd) {
  background-color: #f6f6f6;
}
#environment ul {
  margin: 0;
  padding: 0 20px;
}

/******************************
 * TEST RESULT COLORS
 ******************************/
span.passed,
.passed .col-result {
  color: green;
}

span.skipped,
span.xfailed,
span.rerun,
.skipped .col-result,
.xfailed .col-result,
.rerun .col-result {
  color: orange;
}

span.error,
span.failed,
span.xpassed,
.error .col-result,
.failed .col-result,
.xpassed .col-result {
  color: red;
}

.col-links__extra {
  margin-right: 3px;
}

/******************************
 * RESULTS TABLE
 *
 * 1. Table Layout
 * 2. Extra
 * 3. Sorting items
 *
 ******************************/
/*------------------
 * 1. Table Layout
 *------------------*/
#results-table {
  border: 1px solid #e6e6e6;
  color: #999;
  font-size: 12px;
  width: 100%;
}
#results-table th,
#results-table td {
  padding: 5px;
  border: 1px solid #e6e6e6;
  text-align: left;
}
#results-table th {
  font-weight: bold;
}

/*------------------
 * 2. Extra
 *------------------*/
.logwrapper {
  max-height: 230px;
  overflow-y: scroll;
  background-color: #e6e6e6;
}
.logwrapper.expanded {
  max-height: none;
}
.logwrapper.expanded .logexpander:after {
  content: "collapse [-]";
}
.logwrapper .logexpander {
  z-index: 1;
  position: sticky;
  top: 10px;
  width: max-content;
  border: 1px solid;
  border-radius: 3px;
  padding: 5px 7px;
  margin: 10px 0 10px calc(100% - 80px);
  cursor: pointer;
  background-color: #e6e6e6;
}
.logwrapper .logexpander:after {
  content: "expand [+]";
}
.logwrapper .logexpander:hover {
  color: #000;
  border-color: #000;
}
.logwrapper .log {
  min-height: 40px;
  position: relative;
  top: -50px;
  height: calc(100% + 50px);
  border: 1px solid #e6e6e6;
  color: black;
  display: block;
  font-family: "Courier New", Courier, monospace;
  padding: 5px;
  padding-right: 80px;
  white-space: pre-wrap;
}

div.media {
  border: 1px solid #e6e6e6;
  float: right;
  height: 240px;
  margin: 0 5px;
  overflow: hidden;
  width: 320px;
}

.media-container {
  display: grid;
  grid-template-columns: 25px auto 25px;
  align-items: center;
  flex: 1 1;
  overflow: hidden;
  height: 200px;
}

.media-container--fullscreen {
  grid-template-columns: 0px auto 0px;
}

.media-container__nav--right,
.media-container__nav--left {
  text-align: center;
  cursor: pointer;
}

.media-container__viewport {
  cursor: pointer;
  text-align: center;
  height: inherit;
}
.media-container__viewport img,
.media-container__viewport video {
  object-fit: cover;
  width: 100%;
  max-height: 100%;
}

.media__name,
.media__counter {
  display: flex;
  flex-direction: row;
  justify-content: space-around;
  flex: 0 0 25px;
  align-items: center;
}

.collapsible td:not(.col-links) {
  cursor: pointer;
}
.collapsible td:not(.col-links):hover::after {
  color: #bbb;
  font-style: italic;
  cursor: pointer;
}

.col-result {
  width: 130px;
}
.col-result:hover::after {
  content: " (hide details)";
}

.col-result.collapsed:hover::after {
  content: " (show details)";
}

#environment-header h2:hover::after {
  content: " (hide details)";
  color: #bbb;
  font-style: italic;
  cursor: pointer;
  font-size: 12px;
}

#environment-header.collapsed h2:hover::after {
  content: " (show details)";
  color: #bbb;
  font-style: italic;
  cursor: pointer;
  font-size: 12px;
}

/*------------------
 * 3. Sorting items
 *------------------*/
.sortable {
  cursor: pointer;
}
.sortable.desc:after {
  content: " ";
  position: relative;
  left: 5px;
  bottom: -12.5px;
  border: 10px solid #4caf50;
  border-bottom: 0;
  border-left-color: transparent;
  border-right-color: transparent;
}
.sortable.asc:after {
  content: " ";
  position: relative;
  left: 5px;
  bottom: 12.5px;
  border: 10px solid #4caf50;
  border-top: 0;
  border-left-color: transparent;
  border-right-color: transparent;
}

.hidden, .summary__reload__button.hidden {
  display: none;
}

.summary__data {
  flex: 0 0 550px;
}
.summary__reload {
  flex: 1 1;
  display: flex;
  justify-content: center;
}
.summary__reload__button {
  flex: 0 0 300px;
  display: flex;
  color: white;
  font-weight: bold;
  background-color: #4caf50;
  text-align: center;
  justify-content: center;
  align-items: center;
  border-radius: 3px;
  cursor: pointer;
}
.summary__reload__button:hover {
  background-color: #46a049;
}
.summary__spacer {
  flex: 0 0 550px;
}

.controls {
  display: flex;
  justify-content: space-between;
}

.filters,
.collapse {
  display: flex;
  align-items: center;
}
.filters button,
.collapse button {
  color: #999;
  border: none;
  background: none;
  cursor: pointer;
  text-decoration: underline;
}
.filters button:hover,
.collapse button:hover {
  color: #ccc;
}

.filter__label {
  margin-right: 10px;
}

      </style>
    
  </head>
  <body>
    <h1 id="title">ihrmReport.html</h1>
    <p>Report generated on 30-Mar-2025 at 19:15:42 by <a href="https://pypi.python.org/pypi/pytest-html">pytest-html</a>
        v4.1.1</p>
    <div id="environment-header">
      <h2>Environment</h2>
    </div>
    <table id="environment"></table>
    <!-- TEMPLATES -->
      <template id="template_environment_row">
      <tr>
        <td></td>
        <td></td>
      </tr>
    </template>
    <template id="template_results-table__body--empty">
      <tbody class="results-table-row">
        <tr id="not-found-message">
          <td colspan="4">No results found. Check the filters.</th>
        </tr>
    </template>
    <template id="template_results-table__tbody">
      <tbody class="results-table-row">
        <tr class="collapsible">
        </tr>
        <tr class="extras-row">
          <td class="extra" colspan="4">
            <div class="extraHTML"></div>
            <div class="media">
              <div class="media-container">
                  <div class="media-container__nav--left"><</div>
                  <div class="media-container__viewport">
                    <img src="" />
                    <video controls>
                      <source src="" type="video/mp4">
                    </video>
                  </div>
                  <div class="media-container__nav--right">></div>
                </div>
                <div class="media__name"></div>
                <div class="media__counter"></div>
            </div>
            <div class="logwrapper">
              <div class="logexpander"></div>
              <div class="log"></div>
            </div>
          </td>
        </tr>
      </tbody>
    </template>
    <!-- END TEMPLATES -->
    <div class="summary">
      <div class="summary__data">
        <h2>Summary</h2>
        <div class="additional-summary prefix">
        </div>
        <p class="run-count">24 tests took 00:00:02.</p>
        <p class="filter">(Un)check the boxes to filter the results.</p>
        <div class="summary__reload">
          <div class="summary__reload__button hidden" onclick="location.reload()">
            <div>There are still tests running. <br />Reload this page to get the latest results!</div>
          </div>
        </div>
        <div class="summary__spacer"></div>
        <div class="controls">
          <div class="filters">
            <input checked="true" class="filter" name="filter_checkbox" type="checkbox" data-test-result="failed" />
            <span class="failed">24 Failed,</span>
            <input checked="true" class="filter" name="filter_checkbox" type="checkbox" data-test-result="passed" disabled/>
            <span class="passed">0 Passed,</span>
            <input checked="true" class="filter" name="filter_checkbox" type="checkbox" data-test-result="skipped" disabled/>
            <span class="skipped">0 Skipped,</span>
            <input checked="true" class="filter" name="filter_checkbox" type="checkbox" data-test-result="xfailed" disabled/>
            <span class="xfailed">0 Expected failures,</span>
            <input checked="true" class="filter" name="filter_checkbox" type="checkbox" data-test-result="xpassed" disabled/>
            <span class="xpassed">0 Unexpected passes,</span>
            <input checked="true" class="filter" name="filter_checkbox" type="checkbox" data-test-result="error" />
            <span class="error">6 Errors,</span>
            <input checked="true" class="filter" name="filter_checkbox" type="checkbox" data-test-result="rerun" disabled/>
            <span class="rerun">0 Reruns</span>
          </div>
          <div class="collapse">
            <button id="show_all_details">Show all details</button>&nbsp;/&nbsp;<button id="hide_all_details">Hide all details</button>
          </div>
        </div>
      </div>
      <div class="additional-summary summary">
      </div>
      <div class="additional-summary postfix">
      </div>
    </div>
    <table id="results-table">
      <thead id="results-table-head">
        <tr>
          <th class="sortable" data-column-type="result">Result</th>
          <th class="sortable" data-column-type="testId">Test</th>
          <th class="sortable" data-column-type="duration">Duration</th>
          <th>Links</th>
        </tr>
      </thead>
    </table>
  </body>
  <footer>
    <div id="data-container" data-jsonblob="{&#34;environment&#34;: {&#34;Python&#34;: &#34;3.11.1&#34;, &#34;Platform&#34;: &#34;Windows-10-10.0.19045-SP0&#34;, &#34;Packages&#34;: {&#34;pytest&#34;: &#34;8.3.5&#34;, &#34;pluggy&#34;: &#34;1.5.0&#34;}, &#34;Plugins&#34;: {&#34;anyio&#34;: &#34;3.6.2&#34;, &#34;html&#34;: &#34;4.1.1&#34;, &#34;metadata&#34;: &#34;3.1.1&#34;}, &#34;JAVA_HOME&#34;: &#34;C:\\Program Files\\Java\\jdk-14&#34;}, &#34;tests&#34;: {&#34;scripts/test_add_emp.py::TestAddEmp::test01_add_ok&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Error&#34;, &#34;testId&#34;: &#34;scripts/test_add_emp.py::TestAddEmp::test01_add_ok::setup&#34;, &#34;duration&#34;: &#34;173 ms&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Error&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;scripts/test_add_emp.py::TestAddEmp::test01_add_ok::setup&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;173 ms&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;self = &amp;lt;urllib3.connection.HTTPConnection object at 0x00000239264A15D0&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n&amp;gt;           conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:174: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\connection.py:72: in create_connection\n    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nhost = &amp;#x27;ihrm-test.itheima.net&amp;#x27;, port = 80, family = &amp;lt;AddressFamily.AF_UNSPEC: 0&amp;gt;, type = &amp;lt;SocketKind.SOCK_STREAM: 1&amp;gt;, proto = 0, flags = 0\n\n    def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):\n        &amp;quot;&amp;quot;&amp;quot;Resolve host and port into list of address info entries.\n    \n        Translate the host/port argument into a sequence of 5-tuples that contain\n        all the necessary arguments for creating a socket connected to that service.\n        host is a domain name, a string representation of an IPv4/v6 address or\n        None. port is a string service name such as &amp;#x27;http&amp;#x27;, a numeric port number or\n        None. By passing None as the value of host and port, you can pass NULL to\n        the underlying C API.\n    \n        The family, type and proto arguments can be optionally specified in order to\n        narrow the list of addresses returned. Passing zero as a value for each of\n        these arguments selects the full range of results.\n        &amp;quot;&amp;quot;&amp;quot;\n        # We override this function since we want to translate the numeric family\n        # and socket type values to enum constants.\n        addrlist = []\n&amp;gt;       for res in _socket.getaddrinfo(host, port, family, type, proto, flags):\nE       socket.gaierror: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\socket.py:962: gaierror\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x00000239272B2F10&amp;gt;, method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, body = b&amp;#x27;{&amp;quot;mobile&amp;quot;: &amp;quot;13800000002&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;123456&amp;quot;}&amp;#x27;\nheaders = {&amp;#x27;User-Agent&amp;#x27;: &amp;#x27;python-requests/2.28.1&amp;#x27;, &amp;#x27;Accept-Encoding&amp;#x27;: &amp;#x27;gzip, deflate&amp;#x27;, &amp;#x27;Accept&amp;#x27;: &amp;#x27;*/*&amp;#x27;, &amp;#x27;Connection&amp;#x27;: &amp;#x27;keep-alive&amp;#x27;, &amp;#x27;Content-Length&amp;#x27;: &amp;#x27;47&amp;#x27;, &amp;#x27;Content-Type&amp;#x27;: &amp;#x27;application/json&amp;#x27;}\nretries = Retry(total=0, connect=None, read=False, redirect=None, status=None), redirect = False, assert_same_host = False, timeout = Timeout(connect=None, read=None, total=None)\npool_timeout = None, release_conn = False, chunked = False, body_pos = None, response_kw = {&amp;#x27;decode_content&amp;#x27;: False, &amp;#x27;preload_content&amp;#x27;: False}\nparsed_url = Url(scheme=None, auth=None, host=None, port=None, path=&amp;#x27;/api/sys/login&amp;#x27;, query=None, fragment=None), destination_scheme = None, conn = None, release_this_conn = True\nhttp_tunnel_required = False, err = None, clean_exit = False\n\n    def urlopen(\n        self,\n        method,\n        url,\n        body=None,\n        headers=None,\n        retries=None,\n        redirect=True,\n        assert_same_host=True,\n        timeout=_Default,\n        pool_timeout=None,\n        release_conn=None,\n        chunked=False,\n        body_pos=None,\n        **response_kw\n    ):\n        &amp;quot;&amp;quot;&amp;quot;\n        Get a connection from the pool and perform an HTTP request. This is the\n        lowest level call for making a request, so you&amp;#x27;ll need to specify all\n        the raw details.\n    \n        .. note::\n    \n           More commonly, it&amp;#x27;s appropriate to use a convenience method provided\n           by :class:`.RequestMethods`, such as :meth:`request`.\n    \n        .. note::\n    \n           `release_conn` will only behave as expected if\n           `preload_content=False` because we want to make\n           `preload_content=False` the default behaviour someday soon without\n           breaking backwards compatibility.\n    \n        :param method:\n            HTTP request method (such as GET, POST, PUT, etc.)\n    \n        :param url:\n            The URL to perform the request on.\n    \n        :param body:\n            Data to send in the request body, either :class:`str`, :class:`bytes`,\n            an iterable of :class:`str`/:class:`bytes`, or a file-like object.\n    \n        :param headers:\n            Dictionary of custom headers to send, such as User-Agent,\n            If-None-Match, etc. If None, pool headers are used. If provided,\n            these headers completely replace any pool-specific headers.\n    \n        :param retries:\n            Configure the number of retries to allow before raising a\n            :class:`~urllib3.exceptions.MaxRetryError` exception.\n    \n            Pass ``None`` to retry until you receive a response. Pass a\n            :class:`~urllib3.util.retry.Retry` object for fine-grained control\n            over different types of retries.\n            Pass an integer number to retry connection errors that many times,\n            but no other types of errors. Pass zero to never retry.\n    \n            If ``False``, then retries are disabled and any exception is raised\n            immediately. Also, instead of raising a MaxRetryError on redirects,\n            the redirect response will be returned.\n    \n        :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.\n    \n        :param redirect:\n            If True, automatically handle redirects (status codes 301, 302,\n            303, 307, 308). Each redirect counts as a retry. Disabling retries\n            will disable redirect, too.\n    \n        :param assert_same_host:\n            If ``True``, will make sure that the host of the pool requests is\n            consistent else will raise HostChangedError. When ``False``, you can\n            use the pool on an HTTP proxy and request foreign hosts.\n    \n        :param timeout:\n            If specified, overrides the default timeout for this one\n            request. It may be a float (in seconds) or an instance of\n            :class:`urllib3.util.Timeout`.\n    \n        :param pool_timeout:\n            If set and the pool is set to block=True, then this method will\n            block for ``pool_timeout`` seconds and raise EmptyPoolError if no\n            connection is available within the time period.\n    \n        :param release_conn:\n            If False, then the urlopen call will not release the connection\n            back into the pool once a response is received (but will release if\n            you read the entire contents of the response such as when\n            `preload_content=True`). This is useful if you&amp;#x27;re not preloading\n            the response&amp;#x27;s content immediately. You will need to call\n            ``r.release_conn()`` on the response ``r`` to return the connection\n            back into the pool. If None, it takes the value of\n            ``response_kw.get(&amp;#x27;preload_content&amp;#x27;, True)``.\n    \n        :param chunked:\n            If True, urllib3 will send the body using chunked transfer\n            encoding. Otherwise, urllib3 will send the body using the standard\n            content-length form. Defaults to False.\n    \n        :param int body_pos:\n            Position to seek to in file-like body in the event of a retry or\n            redirect. Typically this won&amp;#x27;t need to be set because urllib3 will\n            auto-populate the value when needed.\n    \n        :param \\\\**response_kw:\n            Additional parameters are passed to\n            :meth:`urllib3.response.HTTPResponse.from_httplib`\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        parsed_url = parse_url(url)\n        destination_scheme = parsed_url.scheme\n    \n        if headers is None:\n            headers = self.headers\n    \n        if not isinstance(retries, Retry):\n            retries = Retry.from_int(retries, redirect=redirect, default=self.retries)\n    \n        if release_conn is None:\n            release_conn = response_kw.get(&amp;quot;preload_content&amp;quot;, True)\n    \n        # Check host\n        if assert_same_host and not self.is_same_host(url):\n            raise HostChangedError(self, url, retries)\n    \n        # Ensure that the URL we&amp;#x27;re connecting to is properly encoded\n        if url.startswith(&amp;quot;/&amp;quot;):\n            url = six.ensure_str(_encode_target(url))\n        else:\n            url = six.ensure_str(parsed_url.url)\n    \n        conn = None\n    \n        # Track whether `conn` needs to be released before\n        # returning/raising/recursing. Update this variable if necessary, and\n        # leave `release_conn` constant throughout the function. That way, if\n        # the function recurses, the original value of `release_conn` will be\n        # passed down into the recursive call, and its value will be respected.\n        #\n        # See issue #651 [1] for details.\n        #\n        # [1] &amp;lt;https://github.com/urllib3/urllib3/issues/651&amp;gt;\n        release_this_conn = release_conn\n    \n        http_tunnel_required = connection_requires_http_tunnel(\n            self.proxy, self.proxy_config, destination_scheme\n        )\n    \n        # Merge the proxy headers. Only done when not using HTTP CONNECT. We\n        # have to copy the headers dict so we can safely change it without those\n        # changes being reflected in anyone else&amp;#x27;s copy.\n        if not http_tunnel_required:\n            headers = headers.copy()\n            headers.update(self.proxy_headers)\n    \n        # Must keep the exception bound to a separate variable or else Python 3\n        # complains about UnboundLocalError.\n        err = None\n    \n        # Keep track of whether we cleanly exited the except block. This\n        # ensures we do proper cleanup in finally.\n        clean_exit = False\n    \n        # Rewind body position, if needed. Record current position\n        # for future rewinds in the event of a redirect/retry.\n        body_pos = set_file_position(body, body_pos)\n    \n        try:\n            # Request a connection from the queue.\n            timeout_obj = self._get_timeout(timeout)\n            conn = self._get_conn(timeout=pool_timeout)\n    \n            conn.timeout = timeout_obj.connect_timeout\n    \n            is_new_proxy_conn = self.proxy is not None and not getattr(\n                conn, &amp;quot;sock&amp;quot;, None\n            )\n            if is_new_proxy_conn and http_tunnel_required:\n                self._prepare_proxy(conn)\n    \n            # Make the request on the httplib connection object.\n&amp;gt;           httplib_response = self._make_request(\n                conn,\n                method,\n                url,\n                timeout=timeout_obj,\n                body=body,\n                headers=headers,\n                chunked=chunked,\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:703: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:398: in _make_request\n    conn.request(method, url, **httplib_request_kw)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:239: in request\n    super(HTTPConnection, self).request(method, url, body=body, headers=headers)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1282: in request\n    self._send_request(method, url, body, headers, encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1328: in _send_request\n    self.endheaders(body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1277: in endheaders\n    self._send_output(message_body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1037: in _send_output\n    self.send(msg)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:975: in send\n    self.connect()\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:205: in connect\n    conn = self._new_conn()\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;urllib3.connection.HTTPConnection object at 0x00000239264A15D0&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n            conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n    \n        except SocketTimeout:\n            raise ConnectTimeoutError(\n                self,\n                &amp;quot;Connection to %s timed out. (connect timeout=%s)&amp;quot;\n                % (self.host, self.timeout),\n            )\n    \n        except SocketError as e:\n&amp;gt;           raise NewConnectionError(\n                self, &amp;quot;Failed to establish a new connection: %s&amp;quot; % e\n            )\nE           urllib3.exceptions.NewConnectionError: &amp;lt;urllib3.connection.HTTPConnection object at 0x00000239264A15D0&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:186: NewConnectionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x00000239272B1810&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n&amp;gt;               resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:489: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:787: in urlopen\n    retries = retries.increment(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = Retry(total=0, connect=None, read=False, redirect=None, status=None), method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, response = None\nerror = NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x00000239264A15D0&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;)\n_pool = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x00000239272B2F10&amp;gt;, _stacktrace = &amp;lt;traceback object at 0x00000239273AAF80&amp;gt;\n\n    def increment(\n        self,\n        method=None,\n        url=None,\n        response=None,\n        error=None,\n        _pool=None,\n        _stacktrace=None,\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Return a new Retry object with incremented retry counters.\n    \n        :param response: A response object, or None, if the server did not\n            return a response.\n        :type response: :class:`~urllib3.response.HTTPResponse`\n        :param Exception error: An error encountered during the request, or\n            None if the response was received successfully.\n    \n        :return: A new ``Retry`` object.\n        &amp;quot;&amp;quot;&amp;quot;\n        if self.total is False and error:\n            # Disabled, indicate to re-raise the error.\n            raise six.reraise(type(error), error, _stacktrace)\n    \n        total = self.total\n        if total is not None:\n            total -= 1\n    \n        connect = self.connect\n        read = self.read\n        redirect = self.redirect\n        status_count = self.status\n        other = self.other\n        cause = &amp;quot;unknown&amp;quot;\n        status = None\n        redirect_location = None\n    \n        if error and self._is_connection_error(error):\n            # Connect retry?\n            if connect is False:\n                raise six.reraise(type(error), error, _stacktrace)\n            elif connect is not None:\n                connect -= 1\n    \n        elif error and self._is_read_error(error):\n            # Read retry?\n            if read is False or not self._is_method_retryable(method):\n                raise six.reraise(type(error), error, _stacktrace)\n            elif read is not None:\n                read -= 1\n    \n        elif error:\n            # Other retry?\n            if other is not None:\n                other -= 1\n    \n        elif response and response.get_redirect_location():\n            # Redirect retry?\n            if redirect is not None:\n                redirect -= 1\n            cause = &amp;quot;too many redirects&amp;quot;\n            redirect_location = response.get_redirect_location()\n            status = response.status\n    \n        else:\n            # Incrementing because of a server error like a 500 in\n            # status_forcelist and the given method is in the allowed_methods\n            cause = ResponseError.GENERIC_ERROR\n            if response and response.status:\n                if status_count is not None:\n                    status_count -= 1\n                cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status)\n                status = response.status\n    \n        history = self.history + (\n            RequestHistory(method, url, error, status, redirect_location),\n        )\n    \n        new_retry = self.new(\n            total=total,\n            connect=connect,\n            read=read,\n            redirect=redirect,\n            status=status_count,\n            other=other,\n            history=history,\n        )\n    \n        if new_retry.is_exhausted():\n&amp;gt;           raise MaxRetryError(_pool, url, error or ResponseError(cause))\nE           urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x00000239264A15D0&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\retry.py:592: MaxRetryError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;class &amp;#x27;scripts.test_add_emp.TestAddEmp&amp;#x27;&amp;gt;\n\n    def setup_class(self):\n&amp;gt;       self.req_header = get_header()\n\nscripts\\test_add_emp.py:13: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\ncommon\\get_header.py:9: in get_header\n    resp = IhrmLoginApi.login(req_data)\napi\\ihrm_login_api.py:12: in login\n    resp = requests.post(url=&amp;quot;http://ihrm-test.itheima.net/api/sys/login&amp;quot;, json=req_data)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:115: in post\n    return request(&amp;quot;post&amp;quot;, url, data=data, json=json, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:59: in request\n    return session.request(method=method, url=url, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:587: in request\n    resp = self.send(prep, **send_kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:701: in send\n    r = adapter.send(request, **kwargs)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x00000239272B1810&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n                resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n    \n            # Send the request.\n            else:\n                if hasattr(conn, &amp;quot;proxy_pool&amp;quot;):\n                    conn = conn.proxy_pool\n    \n                low_conn = conn._get_conn(timeout=DEFAULT_POOL_TIMEOUT)\n    \n                try:\n                    skip_host = &amp;quot;Host&amp;quot; in request.headers\n                    low_conn.putrequest(\n                        request.method,\n                        url,\n                        skip_accept_encoding=True,\n                        skip_host=skip_host,\n                    )\n    \n                    for header, value in request.headers.items():\n                        low_conn.putheader(header, value)\n    \n                    low_conn.endheaders()\n    \n                    for i in request.body:\n                        low_conn.send(hex(len(i))[2:].encode(&amp;quot;utf-8&amp;quot;))\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                        low_conn.send(i)\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                    low_conn.send(b&amp;quot;0\\r\\n\\r\\n&amp;quot;)\n    \n                    # Receive the response from the server\n                    r = low_conn.getresponse()\n    \n                    resp = HTTPResponse.from_httplib(\n                        r,\n                        pool=conn,\n                        connection=low_conn,\n                        preload_content=False,\n                        decode_content=False,\n                    )\n                except Exception:\n                    # If we hit any problems here, clean up the connection.\n                    # Then, raise so that we can handle the actual exception.\n                    low_conn.close()\n                    raise\n    \n        except (ProtocolError, OSError) as err:\n            raise ConnectionError(err, request=request)\n    \n        except MaxRetryError as e:\n            if isinstance(e.reason, ConnectTimeoutError):\n                # TODO: Remove this in 3.0.0: see #2811\n                if not isinstance(e.reason, NewConnectionError):\n                    raise ConnectTimeout(e, request=request)\n    \n            if isinstance(e.reason, ResponseError):\n                raise RetryError(e, request=request)\n    \n            if isinstance(e.reason, _ProxyError):\n                raise ProxyError(e, request=request)\n    \n            if isinstance(e.reason, _SSLError):\n                # This branch is for urllib3 v1.22 and later.\n                raise SSLError(e, request=request)\n    \n&amp;gt;           raise ConnectionError(e, request=request)\nE           requests.exceptions.ConnectionError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x00000239264A15D0&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:565: ConnectionError\n\n------------------------------ Captured log setup ------------------------------\nDEBUG    urllib3.connectionpool:connectionpool.py:228 Starting new HTTP connection (1): ihrm-test.itheima.net:80\n&#34;}], &#34;scripts/test_add_emp.py::TestAddEmp::test02_add_ok_all&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Error&#34;, &#34;testId&#34;: &#34;scripts/test_add_emp.py::TestAddEmp::test02_add_ok_all::setup&#34;, &#34;duration&#34;: &#34;0 ms&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Error&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;scripts/test_add_emp.py::TestAddEmp::test02_add_ok_all::setup&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;0 ms&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;self = &amp;lt;urllib3.connection.HTTPConnection object at 0x00000239264A15D0&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n&amp;gt;           conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:174: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\connection.py:72: in create_connection\n    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nhost = &amp;#x27;ihrm-test.itheima.net&amp;#x27;, port = 80, family = &amp;lt;AddressFamily.AF_UNSPEC: 0&amp;gt;, type = &amp;lt;SocketKind.SOCK_STREAM: 1&amp;gt;, proto = 0, flags = 0\n\n    def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):\n        &amp;quot;&amp;quot;&amp;quot;Resolve host and port into list of address info entries.\n    \n        Translate the host/port argument into a sequence of 5-tuples that contain\n        all the necessary arguments for creating a socket connected to that service.\n        host is a domain name, a string representation of an IPv4/v6 address or\n        None. port is a string service name such as &amp;#x27;http&amp;#x27;, a numeric port number or\n        None. By passing None as the value of host and port, you can pass NULL to\n        the underlying C API.\n    \n        The family, type and proto arguments can be optionally specified in order to\n        narrow the list of addresses returned. Passing zero as a value for each of\n        these arguments selects the full range of results.\n        &amp;quot;&amp;quot;&amp;quot;\n        # We override this function since we want to translate the numeric family\n        # and socket type values to enum constants.\n        addrlist = []\n&amp;gt;       for res in _socket.getaddrinfo(host, port, family, type, proto, flags):\nE       socket.gaierror: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\socket.py:962: gaierror\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x00000239272B2F10&amp;gt;, method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, body = b&amp;#x27;{&amp;quot;mobile&amp;quot;: &amp;quot;13800000002&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;123456&amp;quot;}&amp;#x27;\nheaders = {&amp;#x27;User-Agent&amp;#x27;: &amp;#x27;python-requests/2.28.1&amp;#x27;, &amp;#x27;Accept-Encoding&amp;#x27;: &amp;#x27;gzip, deflate&amp;#x27;, &amp;#x27;Accept&amp;#x27;: &amp;#x27;*/*&amp;#x27;, &amp;#x27;Connection&amp;#x27;: &amp;#x27;keep-alive&amp;#x27;, &amp;#x27;Content-Length&amp;#x27;: &amp;#x27;47&amp;#x27;, &amp;#x27;Content-Type&amp;#x27;: &amp;#x27;application/json&amp;#x27;}\nretries = Retry(total=0, connect=None, read=False, redirect=None, status=None), redirect = False, assert_same_host = False, timeout = Timeout(connect=None, read=None, total=None)\npool_timeout = None, release_conn = False, chunked = False, body_pos = None, response_kw = {&amp;#x27;decode_content&amp;#x27;: False, &amp;#x27;preload_content&amp;#x27;: False}\nparsed_url = Url(scheme=None, auth=None, host=None, port=None, path=&amp;#x27;/api/sys/login&amp;#x27;, query=None, fragment=None), destination_scheme = None, conn = None, release_this_conn = True\nhttp_tunnel_required = False, err = None, clean_exit = False\n\n    def urlopen(\n        self,\n        method,\n        url,\n        body=None,\n        headers=None,\n        retries=None,\n        redirect=True,\n        assert_same_host=True,\n        timeout=_Default,\n        pool_timeout=None,\n        release_conn=None,\n        chunked=False,\n        body_pos=None,\n        **response_kw\n    ):\n        &amp;quot;&amp;quot;&amp;quot;\n        Get a connection from the pool and perform an HTTP request. This is the\n        lowest level call for making a request, so you&amp;#x27;ll need to specify all\n        the raw details.\n    \n        .. note::\n    \n           More commonly, it&amp;#x27;s appropriate to use a convenience method provided\n           by :class:`.RequestMethods`, such as :meth:`request`.\n    \n        .. note::\n    \n           `release_conn` will only behave as expected if\n           `preload_content=False` because we want to make\n           `preload_content=False` the default behaviour someday soon without\n           breaking backwards compatibility.\n    \n        :param method:\n            HTTP request method (such as GET, POST, PUT, etc.)\n    \n        :param url:\n            The URL to perform the request on.\n    \n        :param body:\n            Data to send in the request body, either :class:`str`, :class:`bytes`,\n            an iterable of :class:`str`/:class:`bytes`, or a file-like object.\n    \n        :param headers:\n            Dictionary of custom headers to send, such as User-Agent,\n            If-None-Match, etc. If None, pool headers are used. If provided,\n            these headers completely replace any pool-specific headers.\n    \n        :param retries:\n            Configure the number of retries to allow before raising a\n            :class:`~urllib3.exceptions.MaxRetryError` exception.\n    \n            Pass ``None`` to retry until you receive a response. Pass a\n            :class:`~urllib3.util.retry.Retry` object for fine-grained control\n            over different types of retries.\n            Pass an integer number to retry connection errors that many times,\n            but no other types of errors. Pass zero to never retry.\n    \n            If ``False``, then retries are disabled and any exception is raised\n            immediately. Also, instead of raising a MaxRetryError on redirects,\n            the redirect response will be returned.\n    \n        :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.\n    \n        :param redirect:\n            If True, automatically handle redirects (status codes 301, 302,\n            303, 307, 308). Each redirect counts as a retry. Disabling retries\n            will disable redirect, too.\n    \n        :param assert_same_host:\n            If ``True``, will make sure that the host of the pool requests is\n            consistent else will raise HostChangedError. When ``False``, you can\n            use the pool on an HTTP proxy and request foreign hosts.\n    \n        :param timeout:\n            If specified, overrides the default timeout for this one\n            request. It may be a float (in seconds) or an instance of\n            :class:`urllib3.util.Timeout`.\n    \n        :param pool_timeout:\n            If set and the pool is set to block=True, then this method will\n            block for ``pool_timeout`` seconds and raise EmptyPoolError if no\n            connection is available within the time period.\n    \n        :param release_conn:\n            If False, then the urlopen call will not release the connection\n            back into the pool once a response is received (but will release if\n            you read the entire contents of the response such as when\n            `preload_content=True`). This is useful if you&amp;#x27;re not preloading\n            the response&amp;#x27;s content immediately. You will need to call\n            ``r.release_conn()`` on the response ``r`` to return the connection\n            back into the pool. If None, it takes the value of\n            ``response_kw.get(&amp;#x27;preload_content&amp;#x27;, True)``.\n    \n        :param chunked:\n            If True, urllib3 will send the body using chunked transfer\n            encoding. Otherwise, urllib3 will send the body using the standard\n            content-length form. Defaults to False.\n    \n        :param int body_pos:\n            Position to seek to in file-like body in the event of a retry or\n            redirect. Typically this won&amp;#x27;t need to be set because urllib3 will\n            auto-populate the value when needed.\n    \n        :param \\\\**response_kw:\n            Additional parameters are passed to\n            :meth:`urllib3.response.HTTPResponse.from_httplib`\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        parsed_url = parse_url(url)\n        destination_scheme = parsed_url.scheme\n    \n        if headers is None:\n            headers = self.headers\n    \n        if not isinstance(retries, Retry):\n            retries = Retry.from_int(retries, redirect=redirect, default=self.retries)\n    \n        if release_conn is None:\n            release_conn = response_kw.get(&amp;quot;preload_content&amp;quot;, True)\n    \n        # Check host\n        if assert_same_host and not self.is_same_host(url):\n            raise HostChangedError(self, url, retries)\n    \n        # Ensure that the URL we&amp;#x27;re connecting to is properly encoded\n        if url.startswith(&amp;quot;/&amp;quot;):\n            url = six.ensure_str(_encode_target(url))\n        else:\n            url = six.ensure_str(parsed_url.url)\n    \n        conn = None\n    \n        # Track whether `conn` needs to be released before\n        # returning/raising/recursing. Update this variable if necessary, and\n        # leave `release_conn` constant throughout the function. That way, if\n        # the function recurses, the original value of `release_conn` will be\n        # passed down into the recursive call, and its value will be respected.\n        #\n        # See issue #651 [1] for details.\n        #\n        # [1] &amp;lt;https://github.com/urllib3/urllib3/issues/651&amp;gt;\n        release_this_conn = release_conn\n    \n        http_tunnel_required = connection_requires_http_tunnel(\n            self.proxy, self.proxy_config, destination_scheme\n        )\n    \n        # Merge the proxy headers. Only done when not using HTTP CONNECT. We\n        # have to copy the headers dict so we can safely change it without those\n        # changes being reflected in anyone else&amp;#x27;s copy.\n        if not http_tunnel_required:\n            headers = headers.copy()\n            headers.update(self.proxy_headers)\n    \n        # Must keep the exception bound to a separate variable or else Python 3\n        # complains about UnboundLocalError.\n        err = None\n    \n        # Keep track of whether we cleanly exited the except block. This\n        # ensures we do proper cleanup in finally.\n        clean_exit = False\n    \n        # Rewind body position, if needed. Record current position\n        # for future rewinds in the event of a redirect/retry.\n        body_pos = set_file_position(body, body_pos)\n    \n        try:\n            # Request a connection from the queue.\n            timeout_obj = self._get_timeout(timeout)\n            conn = self._get_conn(timeout=pool_timeout)\n    \n            conn.timeout = timeout_obj.connect_timeout\n    \n            is_new_proxy_conn = self.proxy is not None and not getattr(\n                conn, &amp;quot;sock&amp;quot;, None\n            )\n            if is_new_proxy_conn and http_tunnel_required:\n                self._prepare_proxy(conn)\n    \n            # Make the request on the httplib connection object.\n&amp;gt;           httplib_response = self._make_request(\n                conn,\n                method,\n                url,\n                timeout=timeout_obj,\n                body=body,\n                headers=headers,\n                chunked=chunked,\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:703: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:398: in _make_request\n    conn.request(method, url, **httplib_request_kw)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:239: in request\n    super(HTTPConnection, self).request(method, url, body=body, headers=headers)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1282: in request\n    self._send_request(method, url, body, headers, encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1328: in _send_request\n    self.endheaders(body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1277: in endheaders\n    self._send_output(message_body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1037: in _send_output\n    self.send(msg)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:975: in send\n    self.connect()\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:205: in connect\n    conn = self._new_conn()\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;urllib3.connection.HTTPConnection object at 0x00000239264A15D0&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n            conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n    \n        except SocketTimeout:\n            raise ConnectTimeoutError(\n                self,\n                &amp;quot;Connection to %s timed out. (connect timeout=%s)&amp;quot;\n                % (self.host, self.timeout),\n            )\n    \n        except SocketError as e:\n&amp;gt;           raise NewConnectionError(\n                self, &amp;quot;Failed to establish a new connection: %s&amp;quot; % e\n            )\nE           urllib3.exceptions.NewConnectionError: &amp;lt;urllib3.connection.HTTPConnection object at 0x00000239264A15D0&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:186: NewConnectionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x00000239272B1810&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n&amp;gt;               resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:489: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:787: in urlopen\n    retries = retries.increment(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = Retry(total=0, connect=None, read=False, redirect=None, status=None), method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, response = None\nerror = NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x00000239264A15D0&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;)\n_pool = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x00000239272B2F10&amp;gt;, _stacktrace = &amp;lt;traceback object at 0x00000239273AAF80&amp;gt;\n\n    def increment(\n        self,\n        method=None,\n        url=None,\n        response=None,\n        error=None,\n        _pool=None,\n        _stacktrace=None,\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Return a new Retry object with incremented retry counters.\n    \n        :param response: A response object, or None, if the server did not\n            return a response.\n        :type response: :class:`~urllib3.response.HTTPResponse`\n        :param Exception error: An error encountered during the request, or\n            None if the response was received successfully.\n    \n        :return: A new ``Retry`` object.\n        &amp;quot;&amp;quot;&amp;quot;\n        if self.total is False and error:\n            # Disabled, indicate to re-raise the error.\n            raise six.reraise(type(error), error, _stacktrace)\n    \n        total = self.total\n        if total is not None:\n            total -= 1\n    \n        connect = self.connect\n        read = self.read\n        redirect = self.redirect\n        status_count = self.status\n        other = self.other\n        cause = &amp;quot;unknown&amp;quot;\n        status = None\n        redirect_location = None\n    \n        if error and self._is_connection_error(error):\n            # Connect retry?\n            if connect is False:\n                raise six.reraise(type(error), error, _stacktrace)\n            elif connect is not None:\n                connect -= 1\n    \n        elif error and self._is_read_error(error):\n            # Read retry?\n            if read is False or not self._is_method_retryable(method):\n                raise six.reraise(type(error), error, _stacktrace)\n            elif read is not None:\n                read -= 1\n    \n        elif error:\n            # Other retry?\n            if other is not None:\n                other -= 1\n    \n        elif response and response.get_redirect_location():\n            # Redirect retry?\n            if redirect is not None:\n                redirect -= 1\n            cause = &amp;quot;too many redirects&amp;quot;\n            redirect_location = response.get_redirect_location()\n            status = response.status\n    \n        else:\n            # Incrementing because of a server error like a 500 in\n            # status_forcelist and the given method is in the allowed_methods\n            cause = ResponseError.GENERIC_ERROR\n            if response and response.status:\n                if status_count is not None:\n                    status_count -= 1\n                cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status)\n                status = response.status\n    \n        history = self.history + (\n            RequestHistory(method, url, error, status, redirect_location),\n        )\n    \n        new_retry = self.new(\n            total=total,\n            connect=connect,\n            read=read,\n            redirect=redirect,\n            status=status_count,\n            other=other,\n            history=history,\n        )\n    \n        if new_retry.is_exhausted():\n&amp;gt;           raise MaxRetryError(_pool, url, error or ResponseError(cause))\nE           urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x00000239264A15D0&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\retry.py:592: MaxRetryError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;class &amp;#x27;scripts.test_add_emp.TestAddEmp&amp;#x27;&amp;gt;\n\n    def setup_class(self):\n&amp;gt;       self.req_header = get_header()\n\nscripts\\test_add_emp.py:13: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\ncommon\\get_header.py:9: in get_header\n    resp = IhrmLoginApi.login(req_data)\napi\\ihrm_login_api.py:12: in login\n    resp = requests.post(url=&amp;quot;http://ihrm-test.itheima.net/api/sys/login&amp;quot;, json=req_data)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:115: in post\n    return request(&amp;quot;post&amp;quot;, url, data=data, json=json, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:59: in request\n    return session.request(method=method, url=url, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:587: in request\n    resp = self.send(prep, **send_kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:701: in send\n    r = adapter.send(request, **kwargs)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x00000239272B1810&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n                resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n    \n            # Send the request.\n            else:\n                if hasattr(conn, &amp;quot;proxy_pool&amp;quot;):\n                    conn = conn.proxy_pool\n    \n                low_conn = conn._get_conn(timeout=DEFAULT_POOL_TIMEOUT)\n    \n                try:\n                    skip_host = &amp;quot;Host&amp;quot; in request.headers\n                    low_conn.putrequest(\n                        request.method,\n                        url,\n                        skip_accept_encoding=True,\n                        skip_host=skip_host,\n                    )\n    \n                    for header, value in request.headers.items():\n                        low_conn.putheader(header, value)\n    \n                    low_conn.endheaders()\n    \n                    for i in request.body:\n                        low_conn.send(hex(len(i))[2:].encode(&amp;quot;utf-8&amp;quot;))\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                        low_conn.send(i)\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                    low_conn.send(b&amp;quot;0\\r\\n\\r\\n&amp;quot;)\n    \n                    # Receive the response from the server\n                    r = low_conn.getresponse()\n    \n                    resp = HTTPResponse.from_httplib(\n                        r,\n                        pool=conn,\n                        connection=low_conn,\n                        preload_content=False,\n                        decode_content=False,\n                    )\n                except Exception:\n                    # If we hit any problems here, clean up the connection.\n                    # Then, raise so that we can handle the actual exception.\n                    low_conn.close()\n                    raise\n    \n        except (ProtocolError, OSError) as err:\n            raise ConnectionError(err, request=request)\n    \n        except MaxRetryError as e:\n            if isinstance(e.reason, ConnectTimeoutError):\n                # TODO: Remove this in 3.0.0: see #2811\n                if not isinstance(e.reason, NewConnectionError):\n                    raise ConnectTimeout(e, request=request)\n    \n            if isinstance(e.reason, ResponseError):\n                raise RetryError(e, request=request)\n    \n            if isinstance(e.reason, _ProxyError):\n                raise ProxyError(e, request=request)\n    \n            if isinstance(e.reason, _SSLError):\n                # This branch is for urllib3 v1.22 and later.\n                raise SSLError(e, request=request)\n    \n&amp;gt;           raise ConnectionError(e, request=request)\nE           requests.exceptions.ConnectionError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x00000239264A15D0&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:565: ConnectionError\n&#34;}], &#34;scripts/test_add_emp.py::TestAddEmp::test03_username_None&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Error&#34;, &#34;testId&#34;: &#34;scripts/test_add_emp.py::TestAddEmp::test03_username_None::setup&#34;, &#34;duration&#34;: &#34;0 ms&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Error&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;scripts/test_add_emp.py::TestAddEmp::test03_username_None::setup&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;0 ms&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;self = &amp;lt;urllib3.connection.HTTPConnection object at 0x00000239264A15D0&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n&amp;gt;           conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:174: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\connection.py:72: in create_connection\n    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nhost = &amp;#x27;ihrm-test.itheima.net&amp;#x27;, port = 80, family = &amp;lt;AddressFamily.AF_UNSPEC: 0&amp;gt;, type = &amp;lt;SocketKind.SOCK_STREAM: 1&amp;gt;, proto = 0, flags = 0\n\n    def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):\n        &amp;quot;&amp;quot;&amp;quot;Resolve host and port into list of address info entries.\n    \n        Translate the host/port argument into a sequence of 5-tuples that contain\n        all the necessary arguments for creating a socket connected to that service.\n        host is a domain name, a string representation of an IPv4/v6 address or\n        None. port is a string service name such as &amp;#x27;http&amp;#x27;, a numeric port number or\n        None. By passing None as the value of host and port, you can pass NULL to\n        the underlying C API.\n    \n        The family, type and proto arguments can be optionally specified in order to\n        narrow the list of addresses returned. Passing zero as a value for each of\n        these arguments selects the full range of results.\n        &amp;quot;&amp;quot;&amp;quot;\n        # We override this function since we want to translate the numeric family\n        # and socket type values to enum constants.\n        addrlist = []\n&amp;gt;       for res in _socket.getaddrinfo(host, port, family, type, proto, flags):\nE       socket.gaierror: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\socket.py:962: gaierror\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x00000239272B2F10&amp;gt;, method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, body = b&amp;#x27;{&amp;quot;mobile&amp;quot;: &amp;quot;13800000002&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;123456&amp;quot;}&amp;#x27;\nheaders = {&amp;#x27;User-Agent&amp;#x27;: &amp;#x27;python-requests/2.28.1&amp;#x27;, &amp;#x27;Accept-Encoding&amp;#x27;: &amp;#x27;gzip, deflate&amp;#x27;, &amp;#x27;Accept&amp;#x27;: &amp;#x27;*/*&amp;#x27;, &amp;#x27;Connection&amp;#x27;: &amp;#x27;keep-alive&amp;#x27;, &amp;#x27;Content-Length&amp;#x27;: &amp;#x27;47&amp;#x27;, &amp;#x27;Content-Type&amp;#x27;: &amp;#x27;application/json&amp;#x27;}\nretries = Retry(total=0, connect=None, read=False, redirect=None, status=None), redirect = False, assert_same_host = False, timeout = Timeout(connect=None, read=None, total=None)\npool_timeout = None, release_conn = False, chunked = False, body_pos = None, response_kw = {&amp;#x27;decode_content&amp;#x27;: False, &amp;#x27;preload_content&amp;#x27;: False}\nparsed_url = Url(scheme=None, auth=None, host=None, port=None, path=&amp;#x27;/api/sys/login&amp;#x27;, query=None, fragment=None), destination_scheme = None, conn = None, release_this_conn = True\nhttp_tunnel_required = False, err = None, clean_exit = False\n\n    def urlopen(\n        self,\n        method,\n        url,\n        body=None,\n        headers=None,\n        retries=None,\n        redirect=True,\n        assert_same_host=True,\n        timeout=_Default,\n        pool_timeout=None,\n        release_conn=None,\n        chunked=False,\n        body_pos=None,\n        **response_kw\n    ):\n        &amp;quot;&amp;quot;&amp;quot;\n        Get a connection from the pool and perform an HTTP request. This is the\n        lowest level call for making a request, so you&amp;#x27;ll need to specify all\n        the raw details.\n    \n        .. note::\n    \n           More commonly, it&amp;#x27;s appropriate to use a convenience method provided\n           by :class:`.RequestMethods`, such as :meth:`request`.\n    \n        .. note::\n    \n           `release_conn` will only behave as expected if\n           `preload_content=False` because we want to make\n           `preload_content=False` the default behaviour someday soon without\n           breaking backwards compatibility.\n    \n        :param method:\n            HTTP request method (such as GET, POST, PUT, etc.)\n    \n        :param url:\n            The URL to perform the request on.\n    \n        :param body:\n            Data to send in the request body, either :class:`str`, :class:`bytes`,\n            an iterable of :class:`str`/:class:`bytes`, or a file-like object.\n    \n        :param headers:\n            Dictionary of custom headers to send, such as User-Agent,\n            If-None-Match, etc. If None, pool headers are used. If provided,\n            these headers completely replace any pool-specific headers.\n    \n        :param retries:\n            Configure the number of retries to allow before raising a\n            :class:`~urllib3.exceptions.MaxRetryError` exception.\n    \n            Pass ``None`` to retry until you receive a response. Pass a\n            :class:`~urllib3.util.retry.Retry` object for fine-grained control\n            over different types of retries.\n            Pass an integer number to retry connection errors that many times,\n            but no other types of errors. Pass zero to never retry.\n    \n            If ``False``, then retries are disabled and any exception is raised\n            immediately. Also, instead of raising a MaxRetryError on redirects,\n            the redirect response will be returned.\n    \n        :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.\n    \n        :param redirect:\n            If True, automatically handle redirects (status codes 301, 302,\n            303, 307, 308). Each redirect counts as a retry. Disabling retries\n            will disable redirect, too.\n    \n        :param assert_same_host:\n            If ``True``, will make sure that the host of the pool requests is\n            consistent else will raise HostChangedError. When ``False``, you can\n            use the pool on an HTTP proxy and request foreign hosts.\n    \n        :param timeout:\n            If specified, overrides the default timeout for this one\n            request. It may be a float (in seconds) or an instance of\n            :class:`urllib3.util.Timeout`.\n    \n        :param pool_timeout:\n            If set and the pool is set to block=True, then this method will\n            block for ``pool_timeout`` seconds and raise EmptyPoolError if no\n            connection is available within the time period.\n    \n        :param release_conn:\n            If False, then the urlopen call will not release the connection\n            back into the pool once a response is received (but will release if\n            you read the entire contents of the response such as when\n            `preload_content=True`). This is useful if you&amp;#x27;re not preloading\n            the response&amp;#x27;s content immediately. You will need to call\n            ``r.release_conn()`` on the response ``r`` to return the connection\n            back into the pool. If None, it takes the value of\n            ``response_kw.get(&amp;#x27;preload_content&amp;#x27;, True)``.\n    \n        :param chunked:\n            If True, urllib3 will send the body using chunked transfer\n            encoding. Otherwise, urllib3 will send the body using the standard\n            content-length form. Defaults to False.\n    \n        :param int body_pos:\n            Position to seek to in file-like body in the event of a retry or\n            redirect. Typically this won&amp;#x27;t need to be set because urllib3 will\n            auto-populate the value when needed.\n    \n        :param \\\\**response_kw:\n            Additional parameters are passed to\n            :meth:`urllib3.response.HTTPResponse.from_httplib`\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        parsed_url = parse_url(url)\n        destination_scheme = parsed_url.scheme\n    \n        if headers is None:\n            headers = self.headers\n    \n        if not isinstance(retries, Retry):\n            retries = Retry.from_int(retries, redirect=redirect, default=self.retries)\n    \n        if release_conn is None:\n            release_conn = response_kw.get(&amp;quot;preload_content&amp;quot;, True)\n    \n        # Check host\n        if assert_same_host and not self.is_same_host(url):\n            raise HostChangedError(self, url, retries)\n    \n        # Ensure that the URL we&amp;#x27;re connecting to is properly encoded\n        if url.startswith(&amp;quot;/&amp;quot;):\n            url = six.ensure_str(_encode_target(url))\n        else:\n            url = six.ensure_str(parsed_url.url)\n    \n        conn = None\n    \n        # Track whether `conn` needs to be released before\n        # returning/raising/recursing. Update this variable if necessary, and\n        # leave `release_conn` constant throughout the function. That way, if\n        # the function recurses, the original value of `release_conn` will be\n        # passed down into the recursive call, and its value will be respected.\n        #\n        # See issue #651 [1] for details.\n        #\n        # [1] &amp;lt;https://github.com/urllib3/urllib3/issues/651&amp;gt;\n        release_this_conn = release_conn\n    \n        http_tunnel_required = connection_requires_http_tunnel(\n            self.proxy, self.proxy_config, destination_scheme\n        )\n    \n        # Merge the proxy headers. Only done when not using HTTP CONNECT. We\n        # have to copy the headers dict so we can safely change it without those\n        # changes being reflected in anyone else&amp;#x27;s copy.\n        if not http_tunnel_required:\n            headers = headers.copy()\n            headers.update(self.proxy_headers)\n    \n        # Must keep the exception bound to a separate variable or else Python 3\n        # complains about UnboundLocalError.\n        err = None\n    \n        # Keep track of whether we cleanly exited the except block. This\n        # ensures we do proper cleanup in finally.\n        clean_exit = False\n    \n        # Rewind body position, if needed. Record current position\n        # for future rewinds in the event of a redirect/retry.\n        body_pos = set_file_position(body, body_pos)\n    \n        try:\n            # Request a connection from the queue.\n            timeout_obj = self._get_timeout(timeout)\n            conn = self._get_conn(timeout=pool_timeout)\n    \n            conn.timeout = timeout_obj.connect_timeout\n    \n            is_new_proxy_conn = self.proxy is not None and not getattr(\n                conn, &amp;quot;sock&amp;quot;, None\n            )\n            if is_new_proxy_conn and http_tunnel_required:\n                self._prepare_proxy(conn)\n    \n            # Make the request on the httplib connection object.\n&amp;gt;           httplib_response = self._make_request(\n                conn,\n                method,\n                url,\n                timeout=timeout_obj,\n                body=body,\n                headers=headers,\n                chunked=chunked,\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:703: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:398: in _make_request\n    conn.request(method, url, **httplib_request_kw)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:239: in request\n    super(HTTPConnection, self).request(method, url, body=body, headers=headers)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1282: in request\n    self._send_request(method, url, body, headers, encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1328: in _send_request\n    self.endheaders(body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1277: in endheaders\n    self._send_output(message_body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1037: in _send_output\n    self.send(msg)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:975: in send\n    self.connect()\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:205: in connect\n    conn = self._new_conn()\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;urllib3.connection.HTTPConnection object at 0x00000239264A15D0&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n            conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n    \n        except SocketTimeout:\n            raise ConnectTimeoutError(\n                self,\n                &amp;quot;Connection to %s timed out. (connect timeout=%s)&amp;quot;\n                % (self.host, self.timeout),\n            )\n    \n        except SocketError as e:\n&amp;gt;           raise NewConnectionError(\n                self, &amp;quot;Failed to establish a new connection: %s&amp;quot; % e\n            )\nE           urllib3.exceptions.NewConnectionError: &amp;lt;urllib3.connection.HTTPConnection object at 0x00000239264A15D0&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:186: NewConnectionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x00000239272B1810&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n&amp;gt;               resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:489: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:787: in urlopen\n    retries = retries.increment(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = Retry(total=0, connect=None, read=False, redirect=None, status=None), method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, response = None\nerror = NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x00000239264A15D0&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;)\n_pool = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x00000239272B2F10&amp;gt;, _stacktrace = &amp;lt;traceback object at 0x00000239273AAF80&amp;gt;\n\n    def increment(\n        self,\n        method=None,\n        url=None,\n        response=None,\n        error=None,\n        _pool=None,\n        _stacktrace=None,\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Return a new Retry object with incremented retry counters.\n    \n        :param response: A response object, or None, if the server did not\n            return a response.\n        :type response: :class:`~urllib3.response.HTTPResponse`\n        :param Exception error: An error encountered during the request, or\n            None if the response was received successfully.\n    \n        :return: A new ``Retry`` object.\n        &amp;quot;&amp;quot;&amp;quot;\n        if self.total is False and error:\n            # Disabled, indicate to re-raise the error.\n            raise six.reraise(type(error), error, _stacktrace)\n    \n        total = self.total\n        if total is not None:\n            total -= 1\n    \n        connect = self.connect\n        read = self.read\n        redirect = self.redirect\n        status_count = self.status\n        other = self.other\n        cause = &amp;quot;unknown&amp;quot;\n        status = None\n        redirect_location = None\n    \n        if error and self._is_connection_error(error):\n            # Connect retry?\n            if connect is False:\n                raise six.reraise(type(error), error, _stacktrace)\n            elif connect is not None:\n                connect -= 1\n    \n        elif error and self._is_read_error(error):\n            # Read retry?\n            if read is False or not self._is_method_retryable(method):\n                raise six.reraise(type(error), error, _stacktrace)\n            elif read is not None:\n                read -= 1\n    \n        elif error:\n            # Other retry?\n            if other is not None:\n                other -= 1\n    \n        elif response and response.get_redirect_location():\n            # Redirect retry?\n            if redirect is not None:\n                redirect -= 1\n            cause = &amp;quot;too many redirects&amp;quot;\n            redirect_location = response.get_redirect_location()\n            status = response.status\n    \n        else:\n            # Incrementing because of a server error like a 500 in\n            # status_forcelist and the given method is in the allowed_methods\n            cause = ResponseError.GENERIC_ERROR\n            if response and response.status:\n                if status_count is not None:\n                    status_count -= 1\n                cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status)\n                status = response.status\n    \n        history = self.history + (\n            RequestHistory(method, url, error, status, redirect_location),\n        )\n    \n        new_retry = self.new(\n            total=total,\n            connect=connect,\n            read=read,\n            redirect=redirect,\n            status=status_count,\n            other=other,\n            history=history,\n        )\n    \n        if new_retry.is_exhausted():\n&amp;gt;           raise MaxRetryError(_pool, url, error or ResponseError(cause))\nE           urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x00000239264A15D0&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\retry.py:592: MaxRetryError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;class &amp;#x27;scripts.test_add_emp.TestAddEmp&amp;#x27;&amp;gt;\n\n    def setup_class(self):\n&amp;gt;       self.req_header = get_header()\n\nscripts\\test_add_emp.py:13: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\ncommon\\get_header.py:9: in get_header\n    resp = IhrmLoginApi.login(req_data)\napi\\ihrm_login_api.py:12: in login\n    resp = requests.post(url=&amp;quot;http://ihrm-test.itheima.net/api/sys/login&amp;quot;, json=req_data)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:115: in post\n    return request(&amp;quot;post&amp;quot;, url, data=data, json=json, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:59: in request\n    return session.request(method=method, url=url, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:587: in request\n    resp = self.send(prep, **send_kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:701: in send\n    r = adapter.send(request, **kwargs)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x00000239272B1810&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n                resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n    \n            # Send the request.\n            else:\n                if hasattr(conn, &amp;quot;proxy_pool&amp;quot;):\n                    conn = conn.proxy_pool\n    \n                low_conn = conn._get_conn(timeout=DEFAULT_POOL_TIMEOUT)\n    \n                try:\n                    skip_host = &amp;quot;Host&amp;quot; in request.headers\n                    low_conn.putrequest(\n                        request.method,\n                        url,\n                        skip_accept_encoding=True,\n                        skip_host=skip_host,\n                    )\n    \n                    for header, value in request.headers.items():\n                        low_conn.putheader(header, value)\n    \n                    low_conn.endheaders()\n    \n                    for i in request.body:\n                        low_conn.send(hex(len(i))[2:].encode(&amp;quot;utf-8&amp;quot;))\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                        low_conn.send(i)\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                    low_conn.send(b&amp;quot;0\\r\\n\\r\\n&amp;quot;)\n    \n                    # Receive the response from the server\n                    r = low_conn.getresponse()\n    \n                    resp = HTTPResponse.from_httplib(\n                        r,\n                        pool=conn,\n                        connection=low_conn,\n                        preload_content=False,\n                        decode_content=False,\n                    )\n                except Exception:\n                    # If we hit any problems here, clean up the connection.\n                    # Then, raise so that we can handle the actual exception.\n                    low_conn.close()\n                    raise\n    \n        except (ProtocolError, OSError) as err:\n            raise ConnectionError(err, request=request)\n    \n        except MaxRetryError as e:\n            if isinstance(e.reason, ConnectTimeoutError):\n                # TODO: Remove this in 3.0.0: see #2811\n                if not isinstance(e.reason, NewConnectionError):\n                    raise ConnectTimeout(e, request=request)\n    \n            if isinstance(e.reason, ResponseError):\n                raise RetryError(e, request=request)\n    \n            if isinstance(e.reason, _ProxyError):\n                raise ProxyError(e, request=request)\n    \n            if isinstance(e.reason, _SSLError):\n                # This branch is for urllib3 v1.22 and later.\n                raise SSLError(e, request=request)\n    \n&amp;gt;           raise ConnectionError(e, request=request)\nE           requests.exceptions.ConnectionError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x00000239264A15D0&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:565: ConnectionError\n&#34;}], &#34;scripts/test_add_emp_params.py::TestAddEmpParams::test_add_emp[\\u5fc5\\u9009\\u53c2\\u6570-\\u6dfb\\u52a0\\u6210\\u529f-req_data0-200-True-10000-\\u64cd\\u4f5c\\u6210\\u529f]&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Error&#34;, &#34;testId&#34;: &#34;scripts/test_add_emp_params.py::TestAddEmpParams::test_add_emp[\\u5fc5\\u9009\\u53c2\\u6570-\\u6dfb\\u52a0\\u6210\\u529f-req_data0-200-True-10000-\\u64cd\\u4f5c\\u6210\\u529f]::setup&#34;, &#34;duration&#34;: &#34;67 ms&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Error&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;scripts/test_add_emp_params.py::TestAddEmpParams::test_add_emp[\\u5fc5\\u9009\\u53c2\\u6570-\\u6dfb\\u52a0\\u6210\\u529f-req_data0-200-True-10000-\\u64cd\\u4f5c\\u6210\\u529f]::setup&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;67 ms&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;self = &amp;lt;urllib3.connection.HTTPConnection object at 0x00000239277A8E10&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n&amp;gt;           conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:174: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\connection.py:72: in create_connection\n    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nhost = &amp;#x27;ihrm-test.itheima.net&amp;#x27;, port = 80, family = &amp;lt;AddressFamily.AF_UNSPEC: 0&amp;gt;, type = &amp;lt;SocketKind.SOCK_STREAM: 1&amp;gt;, proto = 0, flags = 0\n\n    def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):\n        &amp;quot;&amp;quot;&amp;quot;Resolve host and port into list of address info entries.\n    \n        Translate the host/port argument into a sequence of 5-tuples that contain\n        all the necessary arguments for creating a socket connected to that service.\n        host is a domain name, a string representation of an IPv4/v6 address or\n        None. port is a string service name such as &amp;#x27;http&amp;#x27;, a numeric port number or\n        None. By passing None as the value of host and port, you can pass NULL to\n        the underlying C API.\n    \n        The family, type and proto arguments can be optionally specified in order to\n        narrow the list of addresses returned. Passing zero as a value for each of\n        these arguments selects the full range of results.\n        &amp;quot;&amp;quot;&amp;quot;\n        # We override this function since we want to translate the numeric family\n        # and socket type values to enum constants.\n        addrlist = []\n&amp;gt;       for res in _socket.getaddrinfo(host, port, family, type, proto, flags):\nE       socket.gaierror: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\socket.py:962: gaierror\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x00000239277A8A10&amp;gt;, method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, body = b&amp;#x27;{&amp;quot;mobile&amp;quot;: &amp;quot;13800000002&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;123456&amp;quot;}&amp;#x27;\nheaders = {&amp;#x27;User-Agent&amp;#x27;: &amp;#x27;python-requests/2.28.1&amp;#x27;, &amp;#x27;Accept-Encoding&amp;#x27;: &amp;#x27;gzip, deflate&amp;#x27;, &amp;#x27;Accept&amp;#x27;: &amp;#x27;*/*&amp;#x27;, &amp;#x27;Connection&amp;#x27;: &amp;#x27;keep-alive&amp;#x27;, &amp;#x27;Content-Length&amp;#x27;: &amp;#x27;47&amp;#x27;, &amp;#x27;Content-Type&amp;#x27;: &amp;#x27;application/json&amp;#x27;}\nretries = Retry(total=0, connect=None, read=False, redirect=None, status=None), redirect = False, assert_same_host = False, timeout = Timeout(connect=None, read=None, total=None)\npool_timeout = None, release_conn = False, chunked = False, body_pos = None, response_kw = {&amp;#x27;decode_content&amp;#x27;: False, &amp;#x27;preload_content&amp;#x27;: False}\nparsed_url = Url(scheme=None, auth=None, host=None, port=None, path=&amp;#x27;/api/sys/login&amp;#x27;, query=None, fragment=None), destination_scheme = None, conn = None, release_this_conn = True\nhttp_tunnel_required = False, err = None, clean_exit = False\n\n    def urlopen(\n        self,\n        method,\n        url,\n        body=None,\n        headers=None,\n        retries=None,\n        redirect=True,\n        assert_same_host=True,\n        timeout=_Default,\n        pool_timeout=None,\n        release_conn=None,\n        chunked=False,\n        body_pos=None,\n        **response_kw\n    ):\n        &amp;quot;&amp;quot;&amp;quot;\n        Get a connection from the pool and perform an HTTP request. This is the\n        lowest level call for making a request, so you&amp;#x27;ll need to specify all\n        the raw details.\n    \n        .. note::\n    \n           More commonly, it&amp;#x27;s appropriate to use a convenience method provided\n           by :class:`.RequestMethods`, such as :meth:`request`.\n    \n        .. note::\n    \n           `release_conn` will only behave as expected if\n           `preload_content=False` because we want to make\n           `preload_content=False` the default behaviour someday soon without\n           breaking backwards compatibility.\n    \n        :param method:\n            HTTP request method (such as GET, POST, PUT, etc.)\n    \n        :param url:\n            The URL to perform the request on.\n    \n        :param body:\n            Data to send in the request body, either :class:`str`, :class:`bytes`,\n            an iterable of :class:`str`/:class:`bytes`, or a file-like object.\n    \n        :param headers:\n            Dictionary of custom headers to send, such as User-Agent,\n            If-None-Match, etc. If None, pool headers are used. If provided,\n            these headers completely replace any pool-specific headers.\n    \n        :param retries:\n            Configure the number of retries to allow before raising a\n            :class:`~urllib3.exceptions.MaxRetryError` exception.\n    \n            Pass ``None`` to retry until you receive a response. Pass a\n            :class:`~urllib3.util.retry.Retry` object for fine-grained control\n            over different types of retries.\n            Pass an integer number to retry connection errors that many times,\n            but no other types of errors. Pass zero to never retry.\n    \n            If ``False``, then retries are disabled and any exception is raised\n            immediately. Also, instead of raising a MaxRetryError on redirects,\n            the redirect response will be returned.\n    \n        :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.\n    \n        :param redirect:\n            If True, automatically handle redirects (status codes 301, 302,\n            303, 307, 308). Each redirect counts as a retry. Disabling retries\n            will disable redirect, too.\n    \n        :param assert_same_host:\n            If ``True``, will make sure that the host of the pool requests is\n            consistent else will raise HostChangedError. When ``False``, you can\n            use the pool on an HTTP proxy and request foreign hosts.\n    \n        :param timeout:\n            If specified, overrides the default timeout for this one\n            request. It may be a float (in seconds) or an instance of\n            :class:`urllib3.util.Timeout`.\n    \n        :param pool_timeout:\n            If set and the pool is set to block=True, then this method will\n            block for ``pool_timeout`` seconds and raise EmptyPoolError if no\n            connection is available within the time period.\n    \n        :param release_conn:\n            If False, then the urlopen call will not release the connection\n            back into the pool once a response is received (but will release if\n            you read the entire contents of the response such as when\n            `preload_content=True`). This is useful if you&amp;#x27;re not preloading\n            the response&amp;#x27;s content immediately. You will need to call\n            ``r.release_conn()`` on the response ``r`` to return the connection\n            back into the pool. If None, it takes the value of\n            ``response_kw.get(&amp;#x27;preload_content&amp;#x27;, True)``.\n    \n        :param chunked:\n            If True, urllib3 will send the body using chunked transfer\n            encoding. Otherwise, urllib3 will send the body using the standard\n            content-length form. Defaults to False.\n    \n        :param int body_pos:\n            Position to seek to in file-like body in the event of a retry or\n            redirect. Typically this won&amp;#x27;t need to be set because urllib3 will\n            auto-populate the value when needed.\n    \n        :param \\\\**response_kw:\n            Additional parameters are passed to\n            :meth:`urllib3.response.HTTPResponse.from_httplib`\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        parsed_url = parse_url(url)\n        destination_scheme = parsed_url.scheme\n    \n        if headers is None:\n            headers = self.headers\n    \n        if not isinstance(retries, Retry):\n            retries = Retry.from_int(retries, redirect=redirect, default=self.retries)\n    \n        if release_conn is None:\n            release_conn = response_kw.get(&amp;quot;preload_content&amp;quot;, True)\n    \n        # Check host\n        if assert_same_host and not self.is_same_host(url):\n            raise HostChangedError(self, url, retries)\n    \n        # Ensure that the URL we&amp;#x27;re connecting to is properly encoded\n        if url.startswith(&amp;quot;/&amp;quot;):\n            url = six.ensure_str(_encode_target(url))\n        else:\n            url = six.ensure_str(parsed_url.url)\n    \n        conn = None\n    \n        # Track whether `conn` needs to be released before\n        # returning/raising/recursing. Update this variable if necessary, and\n        # leave `release_conn` constant throughout the function. That way, if\n        # the function recurses, the original value of `release_conn` will be\n        # passed down into the recursive call, and its value will be respected.\n        #\n        # See issue #651 [1] for details.\n        #\n        # [1] &amp;lt;https://github.com/urllib3/urllib3/issues/651&amp;gt;\n        release_this_conn = release_conn\n    \n        http_tunnel_required = connection_requires_http_tunnel(\n            self.proxy, self.proxy_config, destination_scheme\n        )\n    \n        # Merge the proxy headers. Only done when not using HTTP CONNECT. We\n        # have to copy the headers dict so we can safely change it without those\n        # changes being reflected in anyone else&amp;#x27;s copy.\n        if not http_tunnel_required:\n            headers = headers.copy()\n            headers.update(self.proxy_headers)\n    \n        # Must keep the exception bound to a separate variable or else Python 3\n        # complains about UnboundLocalError.\n        err = None\n    \n        # Keep track of whether we cleanly exited the except block. This\n        # ensures we do proper cleanup in finally.\n        clean_exit = False\n    \n        # Rewind body position, if needed. Record current position\n        # for future rewinds in the event of a redirect/retry.\n        body_pos = set_file_position(body, body_pos)\n    \n        try:\n            # Request a connection from the queue.\n            timeout_obj = self._get_timeout(timeout)\n            conn = self._get_conn(timeout=pool_timeout)\n    \n            conn.timeout = timeout_obj.connect_timeout\n    \n            is_new_proxy_conn = self.proxy is not None and not getattr(\n                conn, &amp;quot;sock&amp;quot;, None\n            )\n            if is_new_proxy_conn and http_tunnel_required:\n                self._prepare_proxy(conn)\n    \n            # Make the request on the httplib connection object.\n&amp;gt;           httplib_response = self._make_request(\n                conn,\n                method,\n                url,\n                timeout=timeout_obj,\n                body=body,\n                headers=headers,\n                chunked=chunked,\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:703: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:398: in _make_request\n    conn.request(method, url, **httplib_request_kw)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:239: in request\n    super(HTTPConnection, self).request(method, url, body=body, headers=headers)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1282: in request\n    self._send_request(method, url, body, headers, encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1328: in _send_request\n    self.endheaders(body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1277: in endheaders\n    self._send_output(message_body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1037: in _send_output\n    self.send(msg)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:975: in send\n    self.connect()\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:205: in connect\n    conn = self._new_conn()\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;urllib3.connection.HTTPConnection object at 0x00000239277A8E10&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n            conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n    \n        except SocketTimeout:\n            raise ConnectTimeoutError(\n                self,\n                &amp;quot;Connection to %s timed out. (connect timeout=%s)&amp;quot;\n                % (self.host, self.timeout),\n            )\n    \n        except SocketError as e:\n&amp;gt;           raise NewConnectionError(\n                self, &amp;quot;Failed to establish a new connection: %s&amp;quot; % e\n            )\nE           urllib3.exceptions.NewConnectionError: &amp;lt;urllib3.connection.HTTPConnection object at 0x00000239277A8E10&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:186: NewConnectionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x00000239277AB690&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n&amp;gt;               resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:489: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:787: in urlopen\n    retries = retries.increment(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = Retry(total=0, connect=None, read=False, redirect=None, status=None), method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, response = None\nerror = NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x00000239277A8E10&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;)\n_pool = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x00000239277A8A10&amp;gt;, _stacktrace = &amp;lt;traceback object at 0x00000239277AA500&amp;gt;\n\n    def increment(\n        self,\n        method=None,\n        url=None,\n        response=None,\n        error=None,\n        _pool=None,\n        _stacktrace=None,\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Return a new Retry object with incremented retry counters.\n    \n        :param response: A response object, or None, if the server did not\n            return a response.\n        :type response: :class:`~urllib3.response.HTTPResponse`\n        :param Exception error: An error encountered during the request, or\n            None if the response was received successfully.\n    \n        :return: A new ``Retry`` object.\n        &amp;quot;&amp;quot;&amp;quot;\n        if self.total is False and error:\n            # Disabled, indicate to re-raise the error.\n            raise six.reraise(type(error), error, _stacktrace)\n    \n        total = self.total\n        if total is not None:\n            total -= 1\n    \n        connect = self.connect\n        read = self.read\n        redirect = self.redirect\n        status_count = self.status\n        other = self.other\n        cause = &amp;quot;unknown&amp;quot;\n        status = None\n        redirect_location = None\n    \n        if error and self._is_connection_error(error):\n            # Connect retry?\n            if connect is False:\n                raise six.reraise(type(error), error, _stacktrace)\n            elif connect is not None:\n                connect -= 1\n    \n        elif error and self._is_read_error(error):\n            # Read retry?\n            if read is False or not self._is_method_retryable(method):\n                raise six.reraise(type(error), error, _stacktrace)\n            elif read is not None:\n                read -= 1\n    \n        elif error:\n            # Other retry?\n            if other is not None:\n                other -= 1\n    \n        elif response and response.get_redirect_location():\n            # Redirect retry?\n            if redirect is not None:\n                redirect -= 1\n            cause = &amp;quot;too many redirects&amp;quot;\n            redirect_location = response.get_redirect_location()\n            status = response.status\n    \n        else:\n            # Incrementing because of a server error like a 500 in\n            # status_forcelist and the given method is in the allowed_methods\n            cause = ResponseError.GENERIC_ERROR\n            if response and response.status:\n                if status_count is not None:\n                    status_count -= 1\n                cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status)\n                status = response.status\n    \n        history = self.history + (\n            RequestHistory(method, url, error, status, redirect_location),\n        )\n    \n        new_retry = self.new(\n            total=total,\n            connect=connect,\n            read=read,\n            redirect=redirect,\n            status=status_count,\n            other=other,\n            history=history,\n        )\n    \n        if new_retry.is_exhausted():\n&amp;gt;           raise MaxRetryError(_pool, url, error or ResponseError(cause))\nE           urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x00000239277A8E10&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\retry.py:592: MaxRetryError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;class &amp;#x27;scripts.test_add_emp_params.TestAddEmpParams&amp;#x27;&amp;gt;\n\n    def setup_class(self):\n&amp;gt;       self.req_header = get_header()\n\nscripts\\test_add_emp_params.py:16: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\ncommon\\get_header.py:9: in get_header\n    resp = IhrmLoginApi.login(req_data)\napi\\ihrm_login_api.py:12: in login\n    resp = requests.post(url=&amp;quot;http://ihrm-test.itheima.net/api/sys/login&amp;quot;, json=req_data)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:115: in post\n    return request(&amp;quot;post&amp;quot;, url, data=data, json=json, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:59: in request\n    return session.request(method=method, url=url, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:587: in request\n    resp = self.send(prep, **send_kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:701: in send\n    r = adapter.send(request, **kwargs)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x00000239277AB690&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n                resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n    \n            # Send the request.\n            else:\n                if hasattr(conn, &amp;quot;proxy_pool&amp;quot;):\n                    conn = conn.proxy_pool\n    \n                low_conn = conn._get_conn(timeout=DEFAULT_POOL_TIMEOUT)\n    \n                try:\n                    skip_host = &amp;quot;Host&amp;quot; in request.headers\n                    low_conn.putrequest(\n                        request.method,\n                        url,\n                        skip_accept_encoding=True,\n                        skip_host=skip_host,\n                    )\n    \n                    for header, value in request.headers.items():\n                        low_conn.putheader(header, value)\n    \n                    low_conn.endheaders()\n    \n                    for i in request.body:\n                        low_conn.send(hex(len(i))[2:].encode(&amp;quot;utf-8&amp;quot;))\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                        low_conn.send(i)\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                    low_conn.send(b&amp;quot;0\\r\\n\\r\\n&amp;quot;)\n    \n                    # Receive the response from the server\n                    r = low_conn.getresponse()\n    \n                    resp = HTTPResponse.from_httplib(\n                        r,\n                        pool=conn,\n                        connection=low_conn,\n                        preload_content=False,\n                        decode_content=False,\n                    )\n                except Exception:\n                    # If we hit any problems here, clean up the connection.\n                    # Then, raise so that we can handle the actual exception.\n                    low_conn.close()\n                    raise\n    \n        except (ProtocolError, OSError) as err:\n            raise ConnectionError(err, request=request)\n    \n        except MaxRetryError as e:\n            if isinstance(e.reason, ConnectTimeoutError):\n                # TODO: Remove this in 3.0.0: see #2811\n                if not isinstance(e.reason, NewConnectionError):\n                    raise ConnectTimeout(e, request=request)\n    \n            if isinstance(e.reason, ResponseError):\n                raise RetryError(e, request=request)\n    \n            if isinstance(e.reason, _ProxyError):\n                raise ProxyError(e, request=request)\n    \n            if isinstance(e.reason, _SSLError):\n                # This branch is for urllib3 v1.22 and later.\n                raise SSLError(e, request=request)\n    \n&amp;gt;           raise ConnectionError(e, request=request)\nE           requests.exceptions.ConnectionError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x00000239277A8E10&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:565: ConnectionError\n\n------------------------------ Captured log setup ------------------------------\nDEBUG    urllib3.connectionpool:connectionpool.py:228 Starting new HTTP connection (1): ihrm-test.itheima.net:80\n&#34;}], &#34;scripts/test_add_emp_params.py::TestAddEmpParams::test_add_emp[\\u5168\\u90e8\\u53c2\\u6570-\\u6dfb\\u52a0\\u6210\\u529f-req_data1-200-True-10000-\\u64cd\\u4f5c\\u6210\\u529f]&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Error&#34;, &#34;testId&#34;: &#34;scripts/test_add_emp_params.py::TestAddEmpParams::test_add_emp[\\u5168\\u90e8\\u53c2\\u6570-\\u6dfb\\u52a0\\u6210\\u529f-req_data1-200-True-10000-\\u64cd\\u4f5c\\u6210\\u529f]::setup&#34;, &#34;duration&#34;: &#34;0 ms&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Error&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;scripts/test_add_emp_params.py::TestAddEmpParams::test_add_emp[\\u5168\\u90e8\\u53c2\\u6570-\\u6dfb\\u52a0\\u6210\\u529f-req_data1-200-True-10000-\\u64cd\\u4f5c\\u6210\\u529f]::setup&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;0 ms&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;self = &amp;lt;urllib3.connection.HTTPConnection object at 0x00000239277A8E10&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n&amp;gt;           conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:174: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\connection.py:72: in create_connection\n    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nhost = &amp;#x27;ihrm-test.itheima.net&amp;#x27;, port = 80, family = &amp;lt;AddressFamily.AF_UNSPEC: 0&amp;gt;, type = &amp;lt;SocketKind.SOCK_STREAM: 1&amp;gt;, proto = 0, flags = 0\n\n    def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):\n        &amp;quot;&amp;quot;&amp;quot;Resolve host and port into list of address info entries.\n    \n        Translate the host/port argument into a sequence of 5-tuples that contain\n        all the necessary arguments for creating a socket connected to that service.\n        host is a domain name, a string representation of an IPv4/v6 address or\n        None. port is a string service name such as &amp;#x27;http&amp;#x27;, a numeric port number or\n        None. By passing None as the value of host and port, you can pass NULL to\n        the underlying C API.\n    \n        The family, type and proto arguments can be optionally specified in order to\n        narrow the list of addresses returned. Passing zero as a value for each of\n        these arguments selects the full range of results.\n        &amp;quot;&amp;quot;&amp;quot;\n        # We override this function since we want to translate the numeric family\n        # and socket type values to enum constants.\n        addrlist = []\n&amp;gt;       for res in _socket.getaddrinfo(host, port, family, type, proto, flags):\nE       socket.gaierror: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\socket.py:962: gaierror\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x00000239277A8A10&amp;gt;, method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, body = b&amp;#x27;{&amp;quot;mobile&amp;quot;: &amp;quot;13800000002&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;123456&amp;quot;}&amp;#x27;\nheaders = {&amp;#x27;User-Agent&amp;#x27;: &amp;#x27;python-requests/2.28.1&amp;#x27;, &amp;#x27;Accept-Encoding&amp;#x27;: &amp;#x27;gzip, deflate&amp;#x27;, &amp;#x27;Accept&amp;#x27;: &amp;#x27;*/*&amp;#x27;, &amp;#x27;Connection&amp;#x27;: &amp;#x27;keep-alive&amp;#x27;, &amp;#x27;Content-Length&amp;#x27;: &amp;#x27;47&amp;#x27;, &amp;#x27;Content-Type&amp;#x27;: &amp;#x27;application/json&amp;#x27;}\nretries = Retry(total=0, connect=None, read=False, redirect=None, status=None), redirect = False, assert_same_host = False, timeout = Timeout(connect=None, read=None, total=None)\npool_timeout = None, release_conn = False, chunked = False, body_pos = None, response_kw = {&amp;#x27;decode_content&amp;#x27;: False, &amp;#x27;preload_content&amp;#x27;: False}\nparsed_url = Url(scheme=None, auth=None, host=None, port=None, path=&amp;#x27;/api/sys/login&amp;#x27;, query=None, fragment=None), destination_scheme = None, conn = None, release_this_conn = True\nhttp_tunnel_required = False, err = None, clean_exit = False\n\n    def urlopen(\n        self,\n        method,\n        url,\n        body=None,\n        headers=None,\n        retries=None,\n        redirect=True,\n        assert_same_host=True,\n        timeout=_Default,\n        pool_timeout=None,\n        release_conn=None,\n        chunked=False,\n        body_pos=None,\n        **response_kw\n    ):\n        &amp;quot;&amp;quot;&amp;quot;\n        Get a connection from the pool and perform an HTTP request. This is the\n        lowest level call for making a request, so you&amp;#x27;ll need to specify all\n        the raw details.\n    \n        .. note::\n    \n           More commonly, it&amp;#x27;s appropriate to use a convenience method provided\n           by :class:`.RequestMethods`, such as :meth:`request`.\n    \n        .. note::\n    \n           `release_conn` will only behave as expected if\n           `preload_content=False` because we want to make\n           `preload_content=False` the default behaviour someday soon without\n           breaking backwards compatibility.\n    \n        :param method:\n            HTTP request method (such as GET, POST, PUT, etc.)\n    \n        :param url:\n            The URL to perform the request on.\n    \n        :param body:\n            Data to send in the request body, either :class:`str`, :class:`bytes`,\n            an iterable of :class:`str`/:class:`bytes`, or a file-like object.\n    \n        :param headers:\n            Dictionary of custom headers to send, such as User-Agent,\n            If-None-Match, etc. If None, pool headers are used. If provided,\n            these headers completely replace any pool-specific headers.\n    \n        :param retries:\n            Configure the number of retries to allow before raising a\n            :class:`~urllib3.exceptions.MaxRetryError` exception.\n    \n            Pass ``None`` to retry until you receive a response. Pass a\n            :class:`~urllib3.util.retry.Retry` object for fine-grained control\n            over different types of retries.\n            Pass an integer number to retry connection errors that many times,\n            but no other types of errors. Pass zero to never retry.\n    \n            If ``False``, then retries are disabled and any exception is raised\n            immediately. Also, instead of raising a MaxRetryError on redirects,\n            the redirect response will be returned.\n    \n        :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.\n    \n        :param redirect:\n            If True, automatically handle redirects (status codes 301, 302,\n            303, 307, 308). Each redirect counts as a retry. Disabling retries\n            will disable redirect, too.\n    \n        :param assert_same_host:\n            If ``True``, will make sure that the host of the pool requests is\n            consistent else will raise HostChangedError. When ``False``, you can\n            use the pool on an HTTP proxy and request foreign hosts.\n    \n        :param timeout:\n            If specified, overrides the default timeout for this one\n            request. It may be a float (in seconds) or an instance of\n            :class:`urllib3.util.Timeout`.\n    \n        :param pool_timeout:\n            If set and the pool is set to block=True, then this method will\n            block for ``pool_timeout`` seconds and raise EmptyPoolError if no\n            connection is available within the time period.\n    \n        :param release_conn:\n            If False, then the urlopen call will not release the connection\n            back into the pool once a response is received (but will release if\n            you read the entire contents of the response such as when\n            `preload_content=True`). This is useful if you&amp;#x27;re not preloading\n            the response&amp;#x27;s content immediately. You will need to call\n            ``r.release_conn()`` on the response ``r`` to return the connection\n            back into the pool. If None, it takes the value of\n            ``response_kw.get(&amp;#x27;preload_content&amp;#x27;, True)``.\n    \n        :param chunked:\n            If True, urllib3 will send the body using chunked transfer\n            encoding. Otherwise, urllib3 will send the body using the standard\n            content-length form. Defaults to False.\n    \n        :param int body_pos:\n            Position to seek to in file-like body in the event of a retry or\n            redirect. Typically this won&amp;#x27;t need to be set because urllib3 will\n            auto-populate the value when needed.\n    \n        :param \\\\**response_kw:\n            Additional parameters are passed to\n            :meth:`urllib3.response.HTTPResponse.from_httplib`\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        parsed_url = parse_url(url)\n        destination_scheme = parsed_url.scheme\n    \n        if headers is None:\n            headers = self.headers\n    \n        if not isinstance(retries, Retry):\n            retries = Retry.from_int(retries, redirect=redirect, default=self.retries)\n    \n        if release_conn is None:\n            release_conn = response_kw.get(&amp;quot;preload_content&amp;quot;, True)\n    \n        # Check host\n        if assert_same_host and not self.is_same_host(url):\n            raise HostChangedError(self, url, retries)\n    \n        # Ensure that the URL we&amp;#x27;re connecting to is properly encoded\n        if url.startswith(&amp;quot;/&amp;quot;):\n            url = six.ensure_str(_encode_target(url))\n        else:\n            url = six.ensure_str(parsed_url.url)\n    \n        conn = None\n    \n        # Track whether `conn` needs to be released before\n        # returning/raising/recursing. Update this variable if necessary, and\n        # leave `release_conn` constant throughout the function. That way, if\n        # the function recurses, the original value of `release_conn` will be\n        # passed down into the recursive call, and its value will be respected.\n        #\n        # See issue #651 [1] for details.\n        #\n        # [1] &amp;lt;https://github.com/urllib3/urllib3/issues/651&amp;gt;\n        release_this_conn = release_conn\n    \n        http_tunnel_required = connection_requires_http_tunnel(\n            self.proxy, self.proxy_config, destination_scheme\n        )\n    \n        # Merge the proxy headers. Only done when not using HTTP CONNECT. We\n        # have to copy the headers dict so we can safely change it without those\n        # changes being reflected in anyone else&amp;#x27;s copy.\n        if not http_tunnel_required:\n            headers = headers.copy()\n            headers.update(self.proxy_headers)\n    \n        # Must keep the exception bound to a separate variable or else Python 3\n        # complains about UnboundLocalError.\n        err = None\n    \n        # Keep track of whether we cleanly exited the except block. This\n        # ensures we do proper cleanup in finally.\n        clean_exit = False\n    \n        # Rewind body position, if needed. Record current position\n        # for future rewinds in the event of a redirect/retry.\n        body_pos = set_file_position(body, body_pos)\n    \n        try:\n            # Request a connection from the queue.\n            timeout_obj = self._get_timeout(timeout)\n            conn = self._get_conn(timeout=pool_timeout)\n    \n            conn.timeout = timeout_obj.connect_timeout\n    \n            is_new_proxy_conn = self.proxy is not None and not getattr(\n                conn, &amp;quot;sock&amp;quot;, None\n            )\n            if is_new_proxy_conn and http_tunnel_required:\n                self._prepare_proxy(conn)\n    \n            # Make the request on the httplib connection object.\n&amp;gt;           httplib_response = self._make_request(\n                conn,\n                method,\n                url,\n                timeout=timeout_obj,\n                body=body,\n                headers=headers,\n                chunked=chunked,\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:703: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:398: in _make_request\n    conn.request(method, url, **httplib_request_kw)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:239: in request\n    super(HTTPConnection, self).request(method, url, body=body, headers=headers)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1282: in request\n    self._send_request(method, url, body, headers, encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1328: in _send_request\n    self.endheaders(body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1277: in endheaders\n    self._send_output(message_body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1037: in _send_output\n    self.send(msg)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:975: in send\n    self.connect()\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:205: in connect\n    conn = self._new_conn()\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;urllib3.connection.HTTPConnection object at 0x00000239277A8E10&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n            conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n    \n        except SocketTimeout:\n            raise ConnectTimeoutError(\n                self,\n                &amp;quot;Connection to %s timed out. (connect timeout=%s)&amp;quot;\n                % (self.host, self.timeout),\n            )\n    \n        except SocketError as e:\n&amp;gt;           raise NewConnectionError(\n                self, &amp;quot;Failed to establish a new connection: %s&amp;quot; % e\n            )\nE           urllib3.exceptions.NewConnectionError: &amp;lt;urllib3.connection.HTTPConnection object at 0x00000239277A8E10&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:186: NewConnectionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x00000239277AB690&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n&amp;gt;               resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:489: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:787: in urlopen\n    retries = retries.increment(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = Retry(total=0, connect=None, read=False, redirect=None, status=None), method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, response = None\nerror = NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x00000239277A8E10&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;)\n_pool = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x00000239277A8A10&amp;gt;, _stacktrace = &amp;lt;traceback object at 0x00000239277AA500&amp;gt;\n\n    def increment(\n        self,\n        method=None,\n        url=None,\n        response=None,\n        error=None,\n        _pool=None,\n        _stacktrace=None,\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Return a new Retry object with incremented retry counters.\n    \n        :param response: A response object, or None, if the server did not\n            return a response.\n        :type response: :class:`~urllib3.response.HTTPResponse`\n        :param Exception error: An error encountered during the request, or\n            None if the response was received successfully.\n    \n        :return: A new ``Retry`` object.\n        &amp;quot;&amp;quot;&amp;quot;\n        if self.total is False and error:\n            # Disabled, indicate to re-raise the error.\n            raise six.reraise(type(error), error, _stacktrace)\n    \n        total = self.total\n        if total is not None:\n            total -= 1\n    \n        connect = self.connect\n        read = self.read\n        redirect = self.redirect\n        status_count = self.status\n        other = self.other\n        cause = &amp;quot;unknown&amp;quot;\n        status = None\n        redirect_location = None\n    \n        if error and self._is_connection_error(error):\n            # Connect retry?\n            if connect is False:\n                raise six.reraise(type(error), error, _stacktrace)\n            elif connect is not None:\n                connect -= 1\n    \n        elif error and self._is_read_error(error):\n            # Read retry?\n            if read is False or not self._is_method_retryable(method):\n                raise six.reraise(type(error), error, _stacktrace)\n            elif read is not None:\n                read -= 1\n    \n        elif error:\n            # Other retry?\n            if other is not None:\n                other -= 1\n    \n        elif response and response.get_redirect_location():\n            # Redirect retry?\n            if redirect is not None:\n                redirect -= 1\n            cause = &amp;quot;too many redirects&amp;quot;\n            redirect_location = response.get_redirect_location()\n            status = response.status\n    \n        else:\n            # Incrementing because of a server error like a 500 in\n            # status_forcelist and the given method is in the allowed_methods\n            cause = ResponseError.GENERIC_ERROR\n            if response and response.status:\n                if status_count is not None:\n                    status_count -= 1\n                cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status)\n                status = response.status\n    \n        history = self.history + (\n            RequestHistory(method, url, error, status, redirect_location),\n        )\n    \n        new_retry = self.new(\n            total=total,\n            connect=connect,\n            read=read,\n            redirect=redirect,\n            status=status_count,\n            other=other,\n            history=history,\n        )\n    \n        if new_retry.is_exhausted():\n&amp;gt;           raise MaxRetryError(_pool, url, error or ResponseError(cause))\nE           urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x00000239277A8E10&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\retry.py:592: MaxRetryError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;class &amp;#x27;scripts.test_add_emp_params.TestAddEmpParams&amp;#x27;&amp;gt;\n\n    def setup_class(self):\n&amp;gt;       self.req_header = get_header()\n\nscripts\\test_add_emp_params.py:16: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\ncommon\\get_header.py:9: in get_header\n    resp = IhrmLoginApi.login(req_data)\napi\\ihrm_login_api.py:12: in login\n    resp = requests.post(url=&amp;quot;http://ihrm-test.itheima.net/api/sys/login&amp;quot;, json=req_data)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:115: in post\n    return request(&amp;quot;post&amp;quot;, url, data=data, json=json, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:59: in request\n    return session.request(method=method, url=url, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:587: in request\n    resp = self.send(prep, **send_kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:701: in send\n    r = adapter.send(request, **kwargs)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x00000239277AB690&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n                resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n    \n            # Send the request.\n            else:\n                if hasattr(conn, &amp;quot;proxy_pool&amp;quot;):\n                    conn = conn.proxy_pool\n    \n                low_conn = conn._get_conn(timeout=DEFAULT_POOL_TIMEOUT)\n    \n                try:\n                    skip_host = &amp;quot;Host&amp;quot; in request.headers\n                    low_conn.putrequest(\n                        request.method,\n                        url,\n                        skip_accept_encoding=True,\n                        skip_host=skip_host,\n                    )\n    \n                    for header, value in request.headers.items():\n                        low_conn.putheader(header, value)\n    \n                    low_conn.endheaders()\n    \n                    for i in request.body:\n                        low_conn.send(hex(len(i))[2:].encode(&amp;quot;utf-8&amp;quot;))\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                        low_conn.send(i)\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                    low_conn.send(b&amp;quot;0\\r\\n\\r\\n&amp;quot;)\n    \n                    # Receive the response from the server\n                    r = low_conn.getresponse()\n    \n                    resp = HTTPResponse.from_httplib(\n                        r,\n                        pool=conn,\n                        connection=low_conn,\n                        preload_content=False,\n                        decode_content=False,\n                    )\n                except Exception:\n                    # If we hit any problems here, clean up the connection.\n                    # Then, raise so that we can handle the actual exception.\n                    low_conn.close()\n                    raise\n    \n        except (ProtocolError, OSError) as err:\n            raise ConnectionError(err, request=request)\n    \n        except MaxRetryError as e:\n            if isinstance(e.reason, ConnectTimeoutError):\n                # TODO: Remove this in 3.0.0: see #2811\n                if not isinstance(e.reason, NewConnectionError):\n                    raise ConnectTimeout(e, request=request)\n    \n            if isinstance(e.reason, ResponseError):\n                raise RetryError(e, request=request)\n    \n            if isinstance(e.reason, _ProxyError):\n                raise ProxyError(e, request=request)\n    \n            if isinstance(e.reason, _SSLError):\n                # This branch is for urllib3 v1.22 and later.\n                raise SSLError(e, request=request)\n    \n&amp;gt;           raise ConnectionError(e, request=request)\nE           requests.exceptions.ConnectionError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x00000239277A8E10&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:565: ConnectionError\n&#34;}], &#34;scripts/test_add_emp_params.py::TestAddEmpParams::test_add_emp[\\u7528\\u6237\\u540d\\u4e3a\\u7a7a-req_data2-200-False-20002-\\u65b0\\u589e\\u5458\\u5de5\\u5931\\u8d25]&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Error&#34;, &#34;testId&#34;: &#34;scripts/test_add_emp_params.py::TestAddEmpParams::test_add_emp[\\u7528\\u6237\\u540d\\u4e3a\\u7a7a-req_data2-200-False-20002-\\u65b0\\u589e\\u5458\\u5de5\\u5931\\u8d25]::setup&#34;, &#34;duration&#34;: &#34;0 ms&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Error&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;scripts/test_add_emp_params.py::TestAddEmpParams::test_add_emp[\\u7528\\u6237\\u540d\\u4e3a\\u7a7a-req_data2-200-False-20002-\\u65b0\\u589e\\u5458\\u5de5\\u5931\\u8d25]::setup&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;0 ms&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;self = &amp;lt;urllib3.connection.HTTPConnection object at 0x00000239277A8E10&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n&amp;gt;           conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:174: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\connection.py:72: in create_connection\n    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nhost = &amp;#x27;ihrm-test.itheima.net&amp;#x27;, port = 80, family = &amp;lt;AddressFamily.AF_UNSPEC: 0&amp;gt;, type = &amp;lt;SocketKind.SOCK_STREAM: 1&amp;gt;, proto = 0, flags = 0\n\n    def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):\n        &amp;quot;&amp;quot;&amp;quot;Resolve host and port into list of address info entries.\n    \n        Translate the host/port argument into a sequence of 5-tuples that contain\n        all the necessary arguments for creating a socket connected to that service.\n        host is a domain name, a string representation of an IPv4/v6 address or\n        None. port is a string service name such as &amp;#x27;http&amp;#x27;, a numeric port number or\n        None. By passing None as the value of host and port, you can pass NULL to\n        the underlying C API.\n    \n        The family, type and proto arguments can be optionally specified in order to\n        narrow the list of addresses returned. Passing zero as a value for each of\n        these arguments selects the full range of results.\n        &amp;quot;&amp;quot;&amp;quot;\n        # We override this function since we want to translate the numeric family\n        # and socket type values to enum constants.\n        addrlist = []\n&amp;gt;       for res in _socket.getaddrinfo(host, port, family, type, proto, flags):\nE       socket.gaierror: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\socket.py:962: gaierror\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x00000239277A8A10&amp;gt;, method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, body = b&amp;#x27;{&amp;quot;mobile&amp;quot;: &amp;quot;13800000002&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;123456&amp;quot;}&amp;#x27;\nheaders = {&amp;#x27;User-Agent&amp;#x27;: &amp;#x27;python-requests/2.28.1&amp;#x27;, &amp;#x27;Accept-Encoding&amp;#x27;: &amp;#x27;gzip, deflate&amp;#x27;, &amp;#x27;Accept&amp;#x27;: &amp;#x27;*/*&amp;#x27;, &amp;#x27;Connection&amp;#x27;: &amp;#x27;keep-alive&amp;#x27;, &amp;#x27;Content-Length&amp;#x27;: &amp;#x27;47&amp;#x27;, &amp;#x27;Content-Type&amp;#x27;: &amp;#x27;application/json&amp;#x27;}\nretries = Retry(total=0, connect=None, read=False, redirect=None, status=None), redirect = False, assert_same_host = False, timeout = Timeout(connect=None, read=None, total=None)\npool_timeout = None, release_conn = False, chunked = False, body_pos = None, response_kw = {&amp;#x27;decode_content&amp;#x27;: False, &amp;#x27;preload_content&amp;#x27;: False}\nparsed_url = Url(scheme=None, auth=None, host=None, port=None, path=&amp;#x27;/api/sys/login&amp;#x27;, query=None, fragment=None), destination_scheme = None, conn = None, release_this_conn = True\nhttp_tunnel_required = False, err = None, clean_exit = False\n\n    def urlopen(\n        self,\n        method,\n        url,\n        body=None,\n        headers=None,\n        retries=None,\n        redirect=True,\n        assert_same_host=True,\n        timeout=_Default,\n        pool_timeout=None,\n        release_conn=None,\n        chunked=False,\n        body_pos=None,\n        **response_kw\n    ):\n        &amp;quot;&amp;quot;&amp;quot;\n        Get a connection from the pool and perform an HTTP request. This is the\n        lowest level call for making a request, so you&amp;#x27;ll need to specify all\n        the raw details.\n    \n        .. note::\n    \n           More commonly, it&amp;#x27;s appropriate to use a convenience method provided\n           by :class:`.RequestMethods`, such as :meth:`request`.\n    \n        .. note::\n    \n           `release_conn` will only behave as expected if\n           `preload_content=False` because we want to make\n           `preload_content=False` the default behaviour someday soon without\n           breaking backwards compatibility.\n    \n        :param method:\n            HTTP request method (such as GET, POST, PUT, etc.)\n    \n        :param url:\n            The URL to perform the request on.\n    \n        :param body:\n            Data to send in the request body, either :class:`str`, :class:`bytes`,\n            an iterable of :class:`str`/:class:`bytes`, or a file-like object.\n    \n        :param headers:\n            Dictionary of custom headers to send, such as User-Agent,\n            If-None-Match, etc. If None, pool headers are used. If provided,\n            these headers completely replace any pool-specific headers.\n    \n        :param retries:\n            Configure the number of retries to allow before raising a\n            :class:`~urllib3.exceptions.MaxRetryError` exception.\n    \n            Pass ``None`` to retry until you receive a response. Pass a\n            :class:`~urllib3.util.retry.Retry` object for fine-grained control\n            over different types of retries.\n            Pass an integer number to retry connection errors that many times,\n            but no other types of errors. Pass zero to never retry.\n    \n            If ``False``, then retries are disabled and any exception is raised\n            immediately. Also, instead of raising a MaxRetryError on redirects,\n            the redirect response will be returned.\n    \n        :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.\n    \n        :param redirect:\n            If True, automatically handle redirects (status codes 301, 302,\n            303, 307, 308). Each redirect counts as a retry. Disabling retries\n            will disable redirect, too.\n    \n        :param assert_same_host:\n            If ``True``, will make sure that the host of the pool requests is\n            consistent else will raise HostChangedError. When ``False``, you can\n            use the pool on an HTTP proxy and request foreign hosts.\n    \n        :param timeout:\n            If specified, overrides the default timeout for this one\n            request. It may be a float (in seconds) or an instance of\n            :class:`urllib3.util.Timeout`.\n    \n        :param pool_timeout:\n            If set and the pool is set to block=True, then this method will\n            block for ``pool_timeout`` seconds and raise EmptyPoolError if no\n            connection is available within the time period.\n    \n        :param release_conn:\n            If False, then the urlopen call will not release the connection\n            back into the pool once a response is received (but will release if\n            you read the entire contents of the response such as when\n            `preload_content=True`). This is useful if you&amp;#x27;re not preloading\n            the response&amp;#x27;s content immediately. You will need to call\n            ``r.release_conn()`` on the response ``r`` to return the connection\n            back into the pool. If None, it takes the value of\n            ``response_kw.get(&amp;#x27;preload_content&amp;#x27;, True)``.\n    \n        :param chunked:\n            If True, urllib3 will send the body using chunked transfer\n            encoding. Otherwise, urllib3 will send the body using the standard\n            content-length form. Defaults to False.\n    \n        :param int body_pos:\n            Position to seek to in file-like body in the event of a retry or\n            redirect. Typically this won&amp;#x27;t need to be set because urllib3 will\n            auto-populate the value when needed.\n    \n        :param \\\\**response_kw:\n            Additional parameters are passed to\n            :meth:`urllib3.response.HTTPResponse.from_httplib`\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        parsed_url = parse_url(url)\n        destination_scheme = parsed_url.scheme\n    \n        if headers is None:\n            headers = self.headers\n    \n        if not isinstance(retries, Retry):\n            retries = Retry.from_int(retries, redirect=redirect, default=self.retries)\n    \n        if release_conn is None:\n            release_conn = response_kw.get(&amp;quot;preload_content&amp;quot;, True)\n    \n        # Check host\n        if assert_same_host and not self.is_same_host(url):\n            raise HostChangedError(self, url, retries)\n    \n        # Ensure that the URL we&amp;#x27;re connecting to is properly encoded\n        if url.startswith(&amp;quot;/&amp;quot;):\n            url = six.ensure_str(_encode_target(url))\n        else:\n            url = six.ensure_str(parsed_url.url)\n    \n        conn = None\n    \n        # Track whether `conn` needs to be released before\n        # returning/raising/recursing. Update this variable if necessary, and\n        # leave `release_conn` constant throughout the function. That way, if\n        # the function recurses, the original value of `release_conn` will be\n        # passed down into the recursive call, and its value will be respected.\n        #\n        # See issue #651 [1] for details.\n        #\n        # [1] &amp;lt;https://github.com/urllib3/urllib3/issues/651&amp;gt;\n        release_this_conn = release_conn\n    \n        http_tunnel_required = connection_requires_http_tunnel(\n            self.proxy, self.proxy_config, destination_scheme\n        )\n    \n        # Merge the proxy headers. Only done when not using HTTP CONNECT. We\n        # have to copy the headers dict so we can safely change it without those\n        # changes being reflected in anyone else&amp;#x27;s copy.\n        if not http_tunnel_required:\n            headers = headers.copy()\n            headers.update(self.proxy_headers)\n    \n        # Must keep the exception bound to a separate variable or else Python 3\n        # complains about UnboundLocalError.\n        err = None\n    \n        # Keep track of whether we cleanly exited the except block. This\n        # ensures we do proper cleanup in finally.\n        clean_exit = False\n    \n        # Rewind body position, if needed. Record current position\n        # for future rewinds in the event of a redirect/retry.\n        body_pos = set_file_position(body, body_pos)\n    \n        try:\n            # Request a connection from the queue.\n            timeout_obj = self._get_timeout(timeout)\n            conn = self._get_conn(timeout=pool_timeout)\n    \n            conn.timeout = timeout_obj.connect_timeout\n    \n            is_new_proxy_conn = self.proxy is not None and not getattr(\n                conn, &amp;quot;sock&amp;quot;, None\n            )\n            if is_new_proxy_conn and http_tunnel_required:\n                self._prepare_proxy(conn)\n    \n            # Make the request on the httplib connection object.\n&amp;gt;           httplib_response = self._make_request(\n                conn,\n                method,\n                url,\n                timeout=timeout_obj,\n                body=body,\n                headers=headers,\n                chunked=chunked,\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:703: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:398: in _make_request\n    conn.request(method, url, **httplib_request_kw)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:239: in request\n    super(HTTPConnection, self).request(method, url, body=body, headers=headers)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1282: in request\n    self._send_request(method, url, body, headers, encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1328: in _send_request\n    self.endheaders(body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1277: in endheaders\n    self._send_output(message_body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1037: in _send_output\n    self.send(msg)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:975: in send\n    self.connect()\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:205: in connect\n    conn = self._new_conn()\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;urllib3.connection.HTTPConnection object at 0x00000239277A8E10&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n            conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n    \n        except SocketTimeout:\n            raise ConnectTimeoutError(\n                self,\n                &amp;quot;Connection to %s timed out. (connect timeout=%s)&amp;quot;\n                % (self.host, self.timeout),\n            )\n    \n        except SocketError as e:\n&amp;gt;           raise NewConnectionError(\n                self, &amp;quot;Failed to establish a new connection: %s&amp;quot; % e\n            )\nE           urllib3.exceptions.NewConnectionError: &amp;lt;urllib3.connection.HTTPConnection object at 0x00000239277A8E10&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:186: NewConnectionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x00000239277AB690&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n&amp;gt;               resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:489: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:787: in urlopen\n    retries = retries.increment(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = Retry(total=0, connect=None, read=False, redirect=None, status=None), method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, response = None\nerror = NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x00000239277A8E10&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;)\n_pool = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x00000239277A8A10&amp;gt;, _stacktrace = &amp;lt;traceback object at 0x00000239277AA500&amp;gt;\n\n    def increment(\n        self,\n        method=None,\n        url=None,\n        response=None,\n        error=None,\n        _pool=None,\n        _stacktrace=None,\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Return a new Retry object with incremented retry counters.\n    \n        :param response: A response object, or None, if the server did not\n            return a response.\n        :type response: :class:`~urllib3.response.HTTPResponse`\n        :param Exception error: An error encountered during the request, or\n            None if the response was received successfully.\n    \n        :return: A new ``Retry`` object.\n        &amp;quot;&amp;quot;&amp;quot;\n        if self.total is False and error:\n            # Disabled, indicate to re-raise the error.\n            raise six.reraise(type(error), error, _stacktrace)\n    \n        total = self.total\n        if total is not None:\n            total -= 1\n    \n        connect = self.connect\n        read = self.read\n        redirect = self.redirect\n        status_count = self.status\n        other = self.other\n        cause = &amp;quot;unknown&amp;quot;\n        status = None\n        redirect_location = None\n    \n        if error and self._is_connection_error(error):\n            # Connect retry?\n            if connect is False:\n                raise six.reraise(type(error), error, _stacktrace)\n            elif connect is not None:\n                connect -= 1\n    \n        elif error and self._is_read_error(error):\n            # Read retry?\n            if read is False or not self._is_method_retryable(method):\n                raise six.reraise(type(error), error, _stacktrace)\n            elif read is not None:\n                read -= 1\n    \n        elif error:\n            # Other retry?\n            if other is not None:\n                other -= 1\n    \n        elif response and response.get_redirect_location():\n            # Redirect retry?\n            if redirect is not None:\n                redirect -= 1\n            cause = &amp;quot;too many redirects&amp;quot;\n            redirect_location = response.get_redirect_location()\n            status = response.status\n    \n        else:\n            # Incrementing because of a server error like a 500 in\n            # status_forcelist and the given method is in the allowed_methods\n            cause = ResponseError.GENERIC_ERROR\n            if response and response.status:\n                if status_count is not None:\n                    status_count -= 1\n                cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status)\n                status = response.status\n    \n        history = self.history + (\n            RequestHistory(method, url, error, status, redirect_location),\n        )\n    \n        new_retry = self.new(\n            total=total,\n            connect=connect,\n            read=read,\n            redirect=redirect,\n            status=status_count,\n            other=other,\n            history=history,\n        )\n    \n        if new_retry.is_exhausted():\n&amp;gt;           raise MaxRetryError(_pool, url, error or ResponseError(cause))\nE           urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x00000239277A8E10&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\retry.py:592: MaxRetryError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;class &amp;#x27;scripts.test_add_emp_params.TestAddEmpParams&amp;#x27;&amp;gt;\n\n    def setup_class(self):\n&amp;gt;       self.req_header = get_header()\n\nscripts\\test_add_emp_params.py:16: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\ncommon\\get_header.py:9: in get_header\n    resp = IhrmLoginApi.login(req_data)\napi\\ihrm_login_api.py:12: in login\n    resp = requests.post(url=&amp;quot;http://ihrm-test.itheima.net/api/sys/login&amp;quot;, json=req_data)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:115: in post\n    return request(&amp;quot;post&amp;quot;, url, data=data, json=json, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:59: in request\n    return session.request(method=method, url=url, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:587: in request\n    resp = self.send(prep, **send_kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:701: in send\n    r = adapter.send(request, **kwargs)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x00000239277AB690&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n                resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n    \n            # Send the request.\n            else:\n                if hasattr(conn, &amp;quot;proxy_pool&amp;quot;):\n                    conn = conn.proxy_pool\n    \n                low_conn = conn._get_conn(timeout=DEFAULT_POOL_TIMEOUT)\n    \n                try:\n                    skip_host = &amp;quot;Host&amp;quot; in request.headers\n                    low_conn.putrequest(\n                        request.method,\n                        url,\n                        skip_accept_encoding=True,\n                        skip_host=skip_host,\n                    )\n    \n                    for header, value in request.headers.items():\n                        low_conn.putheader(header, value)\n    \n                    low_conn.endheaders()\n    \n                    for i in request.body:\n                        low_conn.send(hex(len(i))[2:].encode(&amp;quot;utf-8&amp;quot;))\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                        low_conn.send(i)\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                    low_conn.send(b&amp;quot;0\\r\\n\\r\\n&amp;quot;)\n    \n                    # Receive the response from the server\n                    r = low_conn.getresponse()\n    \n                    resp = HTTPResponse.from_httplib(\n                        r,\n                        pool=conn,\n                        connection=low_conn,\n                        preload_content=False,\n                        decode_content=False,\n                    )\n                except Exception:\n                    # If we hit any problems here, clean up the connection.\n                    # Then, raise so that we can handle the actual exception.\n                    low_conn.close()\n                    raise\n    \n        except (ProtocolError, OSError) as err:\n            raise ConnectionError(err, request=request)\n    \n        except MaxRetryError as e:\n            if isinstance(e.reason, ConnectTimeoutError):\n                # TODO: Remove this in 3.0.0: see #2811\n                if not isinstance(e.reason, NewConnectionError):\n                    raise ConnectTimeout(e, request=request)\n    \n            if isinstance(e.reason, ResponseError):\n                raise RetryError(e, request=request)\n    \n            if isinstance(e.reason, _ProxyError):\n                raise ProxyError(e, request=request)\n    \n            if isinstance(e.reason, _SSLError):\n                # This branch is for urllib3 v1.22 and later.\n                raise SSLError(e, request=request)\n    \n&amp;gt;           raise ConnectionError(e, request=request)\nE           requests.exceptions.ConnectionError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x00000239277A8E10&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:565: ConnectionError\n&#34;}], &#34;scripts/test_ihrm_login.py::TestIhrmLogin::test01_login_success&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Failed&#34;, &#34;testId&#34;: &#34;scripts/test_ihrm_login.py::TestIhrmLogin::test01_login_success&#34;, &#34;duration&#34;: &#34;58 ms&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Failed&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;scripts/test_ihrm_login.py::TestIhrmLogin::test01_login_success&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;58 ms&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;self = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927A62250&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n&amp;gt;           conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:174: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\connection.py:72: in create_connection\n    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nhost = &amp;#x27;ihrm-test.itheima.net&amp;#x27;, port = 80, family = &amp;lt;AddressFamily.AF_UNSPEC: 0&amp;gt;, type = &amp;lt;SocketKind.SOCK_STREAM: 1&amp;gt;, proto = 0, flags = 0\n\n    def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):\n        &amp;quot;&amp;quot;&amp;quot;Resolve host and port into list of address info entries.\n    \n        Translate the host/port argument into a sequence of 5-tuples that contain\n        all the necessary arguments for creating a socket connected to that service.\n        host is a domain name, a string representation of an IPv4/v6 address or\n        None. port is a string service name such as &amp;#x27;http&amp;#x27;, a numeric port number or\n        None. By passing None as the value of host and port, you can pass NULL to\n        the underlying C API.\n    \n        The family, type and proto arguments can be optionally specified in order to\n        narrow the list of addresses returned. Passing zero as a value for each of\n        these arguments selects the full range of results.\n        &amp;quot;&amp;quot;&amp;quot;\n        # We override this function since we want to translate the numeric family\n        # and socket type values to enum constants.\n        addrlist = []\n&amp;gt;       for res in _socket.getaddrinfo(host, port, family, type, proto, flags):\nE       socket.gaierror: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\socket.py:962: gaierror\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927A60250&amp;gt;, method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, body = b&amp;#x27;{&amp;quot;mobile&amp;quot;: &amp;quot;13800000002&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;123456&amp;quot;}&amp;#x27;\nheaders = {&amp;#x27;User-Agent&amp;#x27;: &amp;#x27;python-requests/2.28.1&amp;#x27;, &amp;#x27;Accept-Encoding&amp;#x27;: &amp;#x27;gzip, deflate&amp;#x27;, &amp;#x27;Accept&amp;#x27;: &amp;#x27;*/*&amp;#x27;, &amp;#x27;Connection&amp;#x27;: &amp;#x27;keep-alive&amp;#x27;, &amp;#x27;Content-Length&amp;#x27;: &amp;#x27;47&amp;#x27;, &amp;#x27;Content-Type&amp;#x27;: &amp;#x27;application/json&amp;#x27;}\nretries = Retry(total=0, connect=None, read=False, redirect=None, status=None), redirect = False, assert_same_host = False, timeout = Timeout(connect=None, read=None, total=None)\npool_timeout = None, release_conn = False, chunked = False, body_pos = None, response_kw = {&amp;#x27;decode_content&amp;#x27;: False, &amp;#x27;preload_content&amp;#x27;: False}\nparsed_url = Url(scheme=None, auth=None, host=None, port=None, path=&amp;#x27;/api/sys/login&amp;#x27;, query=None, fragment=None), destination_scheme = None, conn = None, release_this_conn = True\nhttp_tunnel_required = False, err = None, clean_exit = False\n\n    def urlopen(\n        self,\n        method,\n        url,\n        body=None,\n        headers=None,\n        retries=None,\n        redirect=True,\n        assert_same_host=True,\n        timeout=_Default,\n        pool_timeout=None,\n        release_conn=None,\n        chunked=False,\n        body_pos=None,\n        **response_kw\n    ):\n        &amp;quot;&amp;quot;&amp;quot;\n        Get a connection from the pool and perform an HTTP request. This is the\n        lowest level call for making a request, so you&amp;#x27;ll need to specify all\n        the raw details.\n    \n        .. note::\n    \n           More commonly, it&amp;#x27;s appropriate to use a convenience method provided\n           by :class:`.RequestMethods`, such as :meth:`request`.\n    \n        .. note::\n    \n           `release_conn` will only behave as expected if\n           `preload_content=False` because we want to make\n           `preload_content=False` the default behaviour someday soon without\n           breaking backwards compatibility.\n    \n        :param method:\n            HTTP request method (such as GET, POST, PUT, etc.)\n    \n        :param url:\n            The URL to perform the request on.\n    \n        :param body:\n            Data to send in the request body, either :class:`str`, :class:`bytes`,\n            an iterable of :class:`str`/:class:`bytes`, or a file-like object.\n    \n        :param headers:\n            Dictionary of custom headers to send, such as User-Agent,\n            If-None-Match, etc. If None, pool headers are used. If provided,\n            these headers completely replace any pool-specific headers.\n    \n        :param retries:\n            Configure the number of retries to allow before raising a\n            :class:`~urllib3.exceptions.MaxRetryError` exception.\n    \n            Pass ``None`` to retry until you receive a response. Pass a\n            :class:`~urllib3.util.retry.Retry` object for fine-grained control\n            over different types of retries.\n            Pass an integer number to retry connection errors that many times,\n            but no other types of errors. Pass zero to never retry.\n    \n            If ``False``, then retries are disabled and any exception is raised\n            immediately. Also, instead of raising a MaxRetryError on redirects,\n            the redirect response will be returned.\n    \n        :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.\n    \n        :param redirect:\n            If True, automatically handle redirects (status codes 301, 302,\n            303, 307, 308). Each redirect counts as a retry. Disabling retries\n            will disable redirect, too.\n    \n        :param assert_same_host:\n            If ``True``, will make sure that the host of the pool requests is\n            consistent else will raise HostChangedError. When ``False``, you can\n            use the pool on an HTTP proxy and request foreign hosts.\n    \n        :param timeout:\n            If specified, overrides the default timeout for this one\n            request. It may be a float (in seconds) or an instance of\n            :class:`urllib3.util.Timeout`.\n    \n        :param pool_timeout:\n            If set and the pool is set to block=True, then this method will\n            block for ``pool_timeout`` seconds and raise EmptyPoolError if no\n            connection is available within the time period.\n    \n        :param release_conn:\n            If False, then the urlopen call will not release the connection\n            back into the pool once a response is received (but will release if\n            you read the entire contents of the response such as when\n            `preload_content=True`). This is useful if you&amp;#x27;re not preloading\n            the response&amp;#x27;s content immediately. You will need to call\n            ``r.release_conn()`` on the response ``r`` to return the connection\n            back into the pool. If None, it takes the value of\n            ``response_kw.get(&amp;#x27;preload_content&amp;#x27;, True)``.\n    \n        :param chunked:\n            If True, urllib3 will send the body using chunked transfer\n            encoding. Otherwise, urllib3 will send the body using the standard\n            content-length form. Defaults to False.\n    \n        :param int body_pos:\n            Position to seek to in file-like body in the event of a retry or\n            redirect. Typically this won&amp;#x27;t need to be set because urllib3 will\n            auto-populate the value when needed.\n    \n        :param \\\\**response_kw:\n            Additional parameters are passed to\n            :meth:`urllib3.response.HTTPResponse.from_httplib`\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        parsed_url = parse_url(url)\n        destination_scheme = parsed_url.scheme\n    \n        if headers is None:\n            headers = self.headers\n    \n        if not isinstance(retries, Retry):\n            retries = Retry.from_int(retries, redirect=redirect, default=self.retries)\n    \n        if release_conn is None:\n            release_conn = response_kw.get(&amp;quot;preload_content&amp;quot;, True)\n    \n        # Check host\n        if assert_same_host and not self.is_same_host(url):\n            raise HostChangedError(self, url, retries)\n    \n        # Ensure that the URL we&amp;#x27;re connecting to is properly encoded\n        if url.startswith(&amp;quot;/&amp;quot;):\n            url = six.ensure_str(_encode_target(url))\n        else:\n            url = six.ensure_str(parsed_url.url)\n    \n        conn = None\n    \n        # Track whether `conn` needs to be released before\n        # returning/raising/recursing. Update this variable if necessary, and\n        # leave `release_conn` constant throughout the function. That way, if\n        # the function recurses, the original value of `release_conn` will be\n        # passed down into the recursive call, and its value will be respected.\n        #\n        # See issue #651 [1] for details.\n        #\n        # [1] &amp;lt;https://github.com/urllib3/urllib3/issues/651&amp;gt;\n        release_this_conn = release_conn\n    \n        http_tunnel_required = connection_requires_http_tunnel(\n            self.proxy, self.proxy_config, destination_scheme\n        )\n    \n        # Merge the proxy headers. Only done when not using HTTP CONNECT. We\n        # have to copy the headers dict so we can safely change it without those\n        # changes being reflected in anyone else&amp;#x27;s copy.\n        if not http_tunnel_required:\n            headers = headers.copy()\n            headers.update(self.proxy_headers)\n    \n        # Must keep the exception bound to a separate variable or else Python 3\n        # complains about UnboundLocalError.\n        err = None\n    \n        # Keep track of whether we cleanly exited the except block. This\n        # ensures we do proper cleanup in finally.\n        clean_exit = False\n    \n        # Rewind body position, if needed. Record current position\n        # for future rewinds in the event of a redirect/retry.\n        body_pos = set_file_position(body, body_pos)\n    \n        try:\n            # Request a connection from the queue.\n            timeout_obj = self._get_timeout(timeout)\n            conn = self._get_conn(timeout=pool_timeout)\n    \n            conn.timeout = timeout_obj.connect_timeout\n    \n            is_new_proxy_conn = self.proxy is not None and not getattr(\n                conn, &amp;quot;sock&amp;quot;, None\n            )\n            if is_new_proxy_conn and http_tunnel_required:\n                self._prepare_proxy(conn)\n    \n            # Make the request on the httplib connection object.\n&amp;gt;           httplib_response = self._make_request(\n                conn,\n                method,\n                url,\n                timeout=timeout_obj,\n                body=body,\n                headers=headers,\n                chunked=chunked,\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:703: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:398: in _make_request\n    conn.request(method, url, **httplib_request_kw)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:239: in request\n    super(HTTPConnection, self).request(method, url, body=body, headers=headers)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1282: in request\n    self._send_request(method, url, body, headers, encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1328: in _send_request\n    self.endheaders(body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1277: in endheaders\n    self._send_output(message_body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1037: in _send_output\n    self.send(msg)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:975: in send\n    self.connect()\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:205: in connect\n    conn = self._new_conn()\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927A62250&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n            conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n    \n        except SocketTimeout:\n            raise ConnectTimeoutError(\n                self,\n                &amp;quot;Connection to %s timed out. (connect timeout=%s)&amp;quot;\n                % (self.host, self.timeout),\n            )\n    \n        except SocketError as e:\n&amp;gt;           raise NewConnectionError(\n                self, &amp;quot;Failed to establish a new connection: %s&amp;quot; % e\n            )\nE           urllib3.exceptions.NewConnectionError: &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927A62250&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:186: NewConnectionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927A62490&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n&amp;gt;               resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:489: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:787: in urlopen\n    retries = retries.increment(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = Retry(total=0, connect=None, read=False, redirect=None, status=None), method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, response = None\nerror = NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927A62250&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;)\n_pool = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927A60250&amp;gt;, _stacktrace = &amp;lt;traceback object at 0x0000023927BA6F00&amp;gt;\n\n    def increment(\n        self,\n        method=None,\n        url=None,\n        response=None,\n        error=None,\n        _pool=None,\n        _stacktrace=None,\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Return a new Retry object with incremented retry counters.\n    \n        :param response: A response object, or None, if the server did not\n            return a response.\n        :type response: :class:`~urllib3.response.HTTPResponse`\n        :param Exception error: An error encountered during the request, or\n            None if the response was received successfully.\n    \n        :return: A new ``Retry`` object.\n        &amp;quot;&amp;quot;&amp;quot;\n        if self.total is False and error:\n            # Disabled, indicate to re-raise the error.\n            raise six.reraise(type(error), error, _stacktrace)\n    \n        total = self.total\n        if total is not None:\n            total -= 1\n    \n        connect = self.connect\n        read = self.read\n        redirect = self.redirect\n        status_count = self.status\n        other = self.other\n        cause = &amp;quot;unknown&amp;quot;\n        status = None\n        redirect_location = None\n    \n        if error and self._is_connection_error(error):\n            # Connect retry?\n            if connect is False:\n                raise six.reraise(type(error), error, _stacktrace)\n            elif connect is not None:\n                connect -= 1\n    \n        elif error and self._is_read_error(error):\n            # Read retry?\n            if read is False or not self._is_method_retryable(method):\n                raise six.reraise(type(error), error, _stacktrace)\n            elif read is not None:\n                read -= 1\n    \n        elif error:\n            # Other retry?\n            if other is not None:\n                other -= 1\n    \n        elif response and response.get_redirect_location():\n            # Redirect retry?\n            if redirect is not None:\n                redirect -= 1\n            cause = &amp;quot;too many redirects&amp;quot;\n            redirect_location = response.get_redirect_location()\n            status = response.status\n    \n        else:\n            # Incrementing because of a server error like a 500 in\n            # status_forcelist and the given method is in the allowed_methods\n            cause = ResponseError.GENERIC_ERROR\n            if response and response.status:\n                if status_count is not None:\n                    status_count -= 1\n                cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status)\n                status = response.status\n    \n        history = self.history + (\n            RequestHistory(method, url, error, status, redirect_location),\n        )\n    \n        new_retry = self.new(\n            total=total,\n            connect=connect,\n            read=read,\n            redirect=redirect,\n            status=status_count,\n            other=other,\n            history=history,\n        )\n    \n        if new_retry.is_exhausted():\n&amp;gt;           raise MaxRetryError(_pool, url, error or ResponseError(cause))\nE           urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927A62250&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\retry.py:592: MaxRetryError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;scripts.test_ihrm_login.TestIhrmLogin object at 0x000002392728E550&amp;gt;\n\n    def test01_login_success(self):\n        # \u51c6\u5907\u767b\u5f55\u6d4b\u8bd5\u6570\u636e\n        data = {&amp;quot;mobile&amp;quot;: &amp;quot;13800000002&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;123456&amp;quot;}\n        # \u8c03\u7528 \u81ea\u5df1\u5c01\u88c5\u7684 api\uff0c \u83b7\u53d6\u54cd\u5e94\u7ed3\u679c\n&amp;gt;       resp = IhrmLoginApi.login(data)\n\nscripts\\test_ihrm_login.py:18: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\napi\\ihrm_login_api.py:12: in login\n    resp = requests.post(url=&amp;quot;http://ihrm-test.itheima.net/api/sys/login&amp;quot;, json=req_data)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:115: in post\n    return request(&amp;quot;post&amp;quot;, url, data=data, json=json, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:59: in request\n    return session.request(method=method, url=url, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:587: in request\n    resp = self.send(prep, **send_kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:701: in send\n    r = adapter.send(request, **kwargs)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927A62490&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n                resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n    \n            # Send the request.\n            else:\n                if hasattr(conn, &amp;quot;proxy_pool&amp;quot;):\n                    conn = conn.proxy_pool\n    \n                low_conn = conn._get_conn(timeout=DEFAULT_POOL_TIMEOUT)\n    \n                try:\n                    skip_host = &amp;quot;Host&amp;quot; in request.headers\n                    low_conn.putrequest(\n                        request.method,\n                        url,\n                        skip_accept_encoding=True,\n                        skip_host=skip_host,\n                    )\n    \n                    for header, value in request.headers.items():\n                        low_conn.putheader(header, value)\n    \n                    low_conn.endheaders()\n    \n                    for i in request.body:\n                        low_conn.send(hex(len(i))[2:].encode(&amp;quot;utf-8&amp;quot;))\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                        low_conn.send(i)\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                    low_conn.send(b&amp;quot;0\\r\\n\\r\\n&amp;quot;)\n    \n                    # Receive the response from the server\n                    r = low_conn.getresponse()\n    \n                    resp = HTTPResponse.from_httplib(\n                        r,\n                        pool=conn,\n                        connection=low_conn,\n                        preload_content=False,\n                        decode_content=False,\n                    )\n                except Exception:\n                    # If we hit any problems here, clean up the connection.\n                    # Then, raise so that we can handle the actual exception.\n                    low_conn.close()\n                    raise\n    \n        except (ProtocolError, OSError) as err:\n            raise ConnectionError(err, request=request)\n    \n        except MaxRetryError as e:\n            if isinstance(e.reason, ConnectTimeoutError):\n                # TODO: Remove this in 3.0.0: see #2811\n                if not isinstance(e.reason, NewConnectionError):\n                    raise ConnectTimeout(e, request=request)\n    \n            if isinstance(e.reason, ResponseError):\n                raise RetryError(e, request=request)\n    \n            if isinstance(e.reason, _ProxyError):\n                raise ProxyError(e, request=request)\n    \n            if isinstance(e.reason, _SSLError):\n                # This branch is for urllib3 v1.22 and later.\n                raise SSLError(e, request=request)\n    \n&amp;gt;           raise ConnectionError(e, request=request)\nE           requests.exceptions.ConnectionError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927A62250&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:565: ConnectionError\n\n------------------------------ Captured log call -------------------------------\nDEBUG    urllib3.connectionpool:connectionpool.py:228 Starting new HTTP connection (1): ihrm-test.itheima.net:80\n\n&#34;}], &#34;scripts/test_ihrm_login.py::TestIhrmLogin::test02_mobile_not_register&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Failed&#34;, &#34;testId&#34;: &#34;scripts/test_ihrm_login.py::TestIhrmLogin::test02_mobile_not_register&#34;, &#34;duration&#34;: &#34;166 ms&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Failed&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;scripts/test_ihrm_login.py::TestIhrmLogin::test02_mobile_not_register&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;166 ms&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;self = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927CECF50&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n&amp;gt;           conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:174: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\connection.py:72: in create_connection\n    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nhost = &amp;#x27;ihrm-test.itheima.net&amp;#x27;, port = 80, family = &amp;lt;AddressFamily.AF_UNSPEC: 0&amp;gt;, type = &amp;lt;SocketKind.SOCK_STREAM: 1&amp;gt;, proto = 0, flags = 0\n\n    def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):\n        &amp;quot;&amp;quot;&amp;quot;Resolve host and port into list of address info entries.\n    \n        Translate the host/port argument into a sequence of 5-tuples that contain\n        all the necessary arguments for creating a socket connected to that service.\n        host is a domain name, a string representation of an IPv4/v6 address or\n        None. port is a string service name such as &amp;#x27;http&amp;#x27;, a numeric port number or\n        None. By passing None as the value of host and port, you can pass NULL to\n        the underlying C API.\n    \n        The family, type and proto arguments can be optionally specified in order to\n        narrow the list of addresses returned. Passing zero as a value for each of\n        these arguments selects the full range of results.\n        &amp;quot;&amp;quot;&amp;quot;\n        # We override this function since we want to translate the numeric family\n        # and socket type values to enum constants.\n        addrlist = []\n&amp;gt;       for res in _socket.getaddrinfo(host, port, family, type, proto, flags):\nE       socket.gaierror: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\socket.py:962: gaierror\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927CED490&amp;gt;, method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, body = b&amp;#x27;{&amp;quot;mobile&amp;quot;: &amp;quot;13874893701&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;123456&amp;quot;}&amp;#x27;\nheaders = {&amp;#x27;User-Agent&amp;#x27;: &amp;#x27;python-requests/2.28.1&amp;#x27;, &amp;#x27;Accept-Encoding&amp;#x27;: &amp;#x27;gzip, deflate&amp;#x27;, &amp;#x27;Accept&amp;#x27;: &amp;#x27;*/*&amp;#x27;, &amp;#x27;Connection&amp;#x27;: &amp;#x27;keep-alive&amp;#x27;, &amp;#x27;Content-Length&amp;#x27;: &amp;#x27;47&amp;#x27;, &amp;#x27;Content-Type&amp;#x27;: &amp;#x27;application/json&amp;#x27;}\nretries = Retry(total=0, connect=None, read=False, redirect=None, status=None), redirect = False, assert_same_host = False, timeout = Timeout(connect=None, read=None, total=None)\npool_timeout = None, release_conn = False, chunked = False, body_pos = None, response_kw = {&amp;#x27;decode_content&amp;#x27;: False, &amp;#x27;preload_content&amp;#x27;: False}\nparsed_url = Url(scheme=None, auth=None, host=None, port=None, path=&amp;#x27;/api/sys/login&amp;#x27;, query=None, fragment=None), destination_scheme = None, conn = None, release_this_conn = True\nhttp_tunnel_required = False, err = None, clean_exit = False\n\n    def urlopen(\n        self,\n        method,\n        url,\n        body=None,\n        headers=None,\n        retries=None,\n        redirect=True,\n        assert_same_host=True,\n        timeout=_Default,\n        pool_timeout=None,\n        release_conn=None,\n        chunked=False,\n        body_pos=None,\n        **response_kw\n    ):\n        &amp;quot;&amp;quot;&amp;quot;\n        Get a connection from the pool and perform an HTTP request. This is the\n        lowest level call for making a request, so you&amp;#x27;ll need to specify all\n        the raw details.\n    \n        .. note::\n    \n           More commonly, it&amp;#x27;s appropriate to use a convenience method provided\n           by :class:`.RequestMethods`, such as :meth:`request`.\n    \n        .. note::\n    \n           `release_conn` will only behave as expected if\n           `preload_content=False` because we want to make\n           `preload_content=False` the default behaviour someday soon without\n           breaking backwards compatibility.\n    \n        :param method:\n            HTTP request method (such as GET, POST, PUT, etc.)\n    \n        :param url:\n            The URL to perform the request on.\n    \n        :param body:\n            Data to send in the request body, either :class:`str`, :class:`bytes`,\n            an iterable of :class:`str`/:class:`bytes`, or a file-like object.\n    \n        :param headers:\n            Dictionary of custom headers to send, such as User-Agent,\n            If-None-Match, etc. If None, pool headers are used. If provided,\n            these headers completely replace any pool-specific headers.\n    \n        :param retries:\n            Configure the number of retries to allow before raising a\n            :class:`~urllib3.exceptions.MaxRetryError` exception.\n    \n            Pass ``None`` to retry until you receive a response. Pass a\n            :class:`~urllib3.util.retry.Retry` object for fine-grained control\n            over different types of retries.\n            Pass an integer number to retry connection errors that many times,\n            but no other types of errors. Pass zero to never retry.\n    \n            If ``False``, then retries are disabled and any exception is raised\n            immediately. Also, instead of raising a MaxRetryError on redirects,\n            the redirect response will be returned.\n    \n        :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.\n    \n        :param redirect:\n            If True, automatically handle redirects (status codes 301, 302,\n            303, 307, 308). Each redirect counts as a retry. Disabling retries\n            will disable redirect, too.\n    \n        :param assert_same_host:\n            If ``True``, will make sure that the host of the pool requests is\n            consistent else will raise HostChangedError. When ``False``, you can\n            use the pool on an HTTP proxy and request foreign hosts.\n    \n        :param timeout:\n            If specified, overrides the default timeout for this one\n            request. It may be a float (in seconds) or an instance of\n            :class:`urllib3.util.Timeout`.\n    \n        :param pool_timeout:\n            If set and the pool is set to block=True, then this method will\n            block for ``pool_timeout`` seconds and raise EmptyPoolError if no\n            connection is available within the time period.\n    \n        :param release_conn:\n            If False, then the urlopen call will not release the connection\n            back into the pool once a response is received (but will release if\n            you read the entire contents of the response such as when\n            `preload_content=True`). This is useful if you&amp;#x27;re not preloading\n            the response&amp;#x27;s content immediately. You will need to call\n            ``r.release_conn()`` on the response ``r`` to return the connection\n            back into the pool. If None, it takes the value of\n            ``response_kw.get(&amp;#x27;preload_content&amp;#x27;, True)``.\n    \n        :param chunked:\n            If True, urllib3 will send the body using chunked transfer\n            encoding. Otherwise, urllib3 will send the body using the standard\n            content-length form. Defaults to False.\n    \n        :param int body_pos:\n            Position to seek to in file-like body in the event of a retry or\n            redirect. Typically this won&amp;#x27;t need to be set because urllib3 will\n            auto-populate the value when needed.\n    \n        :param \\\\**response_kw:\n            Additional parameters are passed to\n            :meth:`urllib3.response.HTTPResponse.from_httplib`\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        parsed_url = parse_url(url)\n        destination_scheme = parsed_url.scheme\n    \n        if headers is None:\n            headers = self.headers\n    \n        if not isinstance(retries, Retry):\n            retries = Retry.from_int(retries, redirect=redirect, default=self.retries)\n    \n        if release_conn is None:\n            release_conn = response_kw.get(&amp;quot;preload_content&amp;quot;, True)\n    \n        # Check host\n        if assert_same_host and not self.is_same_host(url):\n            raise HostChangedError(self, url, retries)\n    \n        # Ensure that the URL we&amp;#x27;re connecting to is properly encoded\n        if url.startswith(&amp;quot;/&amp;quot;):\n            url = six.ensure_str(_encode_target(url))\n        else:\n            url = six.ensure_str(parsed_url.url)\n    \n        conn = None\n    \n        # Track whether `conn` needs to be released before\n        # returning/raising/recursing. Update this variable if necessary, and\n        # leave `release_conn` constant throughout the function. That way, if\n        # the function recurses, the original value of `release_conn` will be\n        # passed down into the recursive call, and its value will be respected.\n        #\n        # See issue #651 [1] for details.\n        #\n        # [1] &amp;lt;https://github.com/urllib3/urllib3/issues/651&amp;gt;\n        release_this_conn = release_conn\n    \n        http_tunnel_required = connection_requires_http_tunnel(\n            self.proxy, self.proxy_config, destination_scheme\n        )\n    \n        # Merge the proxy headers. Only done when not using HTTP CONNECT. We\n        # have to copy the headers dict so we can safely change it without those\n        # changes being reflected in anyone else&amp;#x27;s copy.\n        if not http_tunnel_required:\n            headers = headers.copy()\n            headers.update(self.proxy_headers)\n    \n        # Must keep the exception bound to a separate variable or else Python 3\n        # complains about UnboundLocalError.\n        err = None\n    \n        # Keep track of whether we cleanly exited the except block. This\n        # ensures we do proper cleanup in finally.\n        clean_exit = False\n    \n        # Rewind body position, if needed. Record current position\n        # for future rewinds in the event of a redirect/retry.\n        body_pos = set_file_position(body, body_pos)\n    \n        try:\n            # Request a connection from the queue.\n            timeout_obj = self._get_timeout(timeout)\n            conn = self._get_conn(timeout=pool_timeout)\n    \n            conn.timeout = timeout_obj.connect_timeout\n    \n            is_new_proxy_conn = self.proxy is not None and not getattr(\n                conn, &amp;quot;sock&amp;quot;, None\n            )\n            if is_new_proxy_conn and http_tunnel_required:\n                self._prepare_proxy(conn)\n    \n            # Make the request on the httplib connection object.\n&amp;gt;           httplib_response = self._make_request(\n                conn,\n                method,\n                url,\n                timeout=timeout_obj,\n                body=body,\n                headers=headers,\n                chunked=chunked,\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:703: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:398: in _make_request\n    conn.request(method, url, **httplib_request_kw)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:239: in request\n    super(HTTPConnection, self).request(method, url, body=body, headers=headers)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1282: in request\n    self._send_request(method, url, body, headers, encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1328: in _send_request\n    self.endheaders(body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1277: in endheaders\n    self._send_output(message_body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1037: in _send_output\n    self.send(msg)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:975: in send\n    self.connect()\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:205: in connect\n    conn = self._new_conn()\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927CECF50&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n            conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n    \n        except SocketTimeout:\n            raise ConnectTimeoutError(\n                self,\n                &amp;quot;Connection to %s timed out. (connect timeout=%s)&amp;quot;\n                % (self.host, self.timeout),\n            )\n    \n        except SocketError as e:\n&amp;gt;           raise NewConnectionError(\n                self, &amp;quot;Failed to establish a new connection: %s&amp;quot; % e\n            )\nE           urllib3.exceptions.NewConnectionError: &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927CECF50&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:186: NewConnectionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927CEFE10&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n&amp;gt;               resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:489: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:787: in urlopen\n    retries = retries.increment(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = Retry(total=0, connect=None, read=False, redirect=None, status=None), method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, response = None\nerror = NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927CECF50&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;)\n_pool = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927CED490&amp;gt;, _stacktrace = &amp;lt;traceback object at 0x0000023927CEFD80&amp;gt;\n\n    def increment(\n        self,\n        method=None,\n        url=None,\n        response=None,\n        error=None,\n        _pool=None,\n        _stacktrace=None,\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Return a new Retry object with incremented retry counters.\n    \n        :param response: A response object, or None, if the server did not\n            return a response.\n        :type response: :class:`~urllib3.response.HTTPResponse`\n        :param Exception error: An error encountered during the request, or\n            None if the response was received successfully.\n    \n        :return: A new ``Retry`` object.\n        &amp;quot;&amp;quot;&amp;quot;\n        if self.total is False and error:\n            # Disabled, indicate to re-raise the error.\n            raise six.reraise(type(error), error, _stacktrace)\n    \n        total = self.total\n        if total is not None:\n            total -= 1\n    \n        connect = self.connect\n        read = self.read\n        redirect = self.redirect\n        status_count = self.status\n        other = self.other\n        cause = &amp;quot;unknown&amp;quot;\n        status = None\n        redirect_location = None\n    \n        if error and self._is_connection_error(error):\n            # Connect retry?\n            if connect is False:\n                raise six.reraise(type(error), error, _stacktrace)\n            elif connect is not None:\n                connect -= 1\n    \n        elif error and self._is_read_error(error):\n            # Read retry?\n            if read is False or not self._is_method_retryable(method):\n                raise six.reraise(type(error), error, _stacktrace)\n            elif read is not None:\n                read -= 1\n    \n        elif error:\n            # Other retry?\n            if other is not None:\n                other -= 1\n    \n        elif response and response.get_redirect_location():\n            # Redirect retry?\n            if redirect is not None:\n                redirect -= 1\n            cause = &amp;quot;too many redirects&amp;quot;\n            redirect_location = response.get_redirect_location()\n            status = response.status\n    \n        else:\n            # Incrementing because of a server error like a 500 in\n            # status_forcelist and the given method is in the allowed_methods\n            cause = ResponseError.GENERIC_ERROR\n            if response and response.status:\n                if status_count is not None:\n                    status_count -= 1\n                cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status)\n                status = response.status\n    \n        history = self.history + (\n            RequestHistory(method, url, error, status, redirect_location),\n        )\n    \n        new_retry = self.new(\n            total=total,\n            connect=connect,\n            read=read,\n            redirect=redirect,\n            status=status_count,\n            other=other,\n            history=history,\n        )\n    \n        if new_retry.is_exhausted():\n&amp;gt;           raise MaxRetryError(_pool, url, error or ResponseError(cause))\nE           urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927CECF50&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\retry.py:592: MaxRetryError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;scripts.test_ihrm_login.TestIhrmLogin object at 0x000002392728EB90&amp;gt;\n\n    def test02_mobile_not_register(self):\n        # \u51c6\u5907\u767b\u5f55\u6d4b\u8bd5\u6570\u636e\n        data = {&amp;quot;mobile&amp;quot;: &amp;quot;13874893701&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;123456&amp;quot;}\n        # \u8c03\u7528 \u81ea\u5df1\u5c01\u88c5\u7684 api\uff0c \u83b7\u53d6\u54cd\u5e94\u7ed3\u679c\n&amp;gt;       resp = IhrmLoginApi.login(data)\n\nscripts\\test_ihrm_login.py:50: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\napi\\ihrm_login_api.py:12: in login\n    resp = requests.post(url=&amp;quot;http://ihrm-test.itheima.net/api/sys/login&amp;quot;, json=req_data)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:115: in post\n    return request(&amp;quot;post&amp;quot;, url, data=data, json=json, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:59: in request\n    return session.request(method=method, url=url, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:587: in request\n    resp = self.send(prep, **send_kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:701: in send\n    r = adapter.send(request, **kwargs)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927CEFE10&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n                resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n    \n            # Send the request.\n            else:\n                if hasattr(conn, &amp;quot;proxy_pool&amp;quot;):\n                    conn = conn.proxy_pool\n    \n                low_conn = conn._get_conn(timeout=DEFAULT_POOL_TIMEOUT)\n    \n                try:\n                    skip_host = &amp;quot;Host&amp;quot; in request.headers\n                    low_conn.putrequest(\n                        request.method,\n                        url,\n                        skip_accept_encoding=True,\n                        skip_host=skip_host,\n                    )\n    \n                    for header, value in request.headers.items():\n                        low_conn.putheader(header, value)\n    \n                    low_conn.endheaders()\n    \n                    for i in request.body:\n                        low_conn.send(hex(len(i))[2:].encode(&amp;quot;utf-8&amp;quot;))\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                        low_conn.send(i)\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                    low_conn.send(b&amp;quot;0\\r\\n\\r\\n&amp;quot;)\n    \n                    # Receive the response from the server\n                    r = low_conn.getresponse()\n    \n                    resp = HTTPResponse.from_httplib(\n                        r,\n                        pool=conn,\n                        connection=low_conn,\n                        preload_content=False,\n                        decode_content=False,\n                    )\n                except Exception:\n                    # If we hit any problems here, clean up the connection.\n                    # Then, raise so that we can handle the actual exception.\n                    low_conn.close()\n                    raise\n    \n        except (ProtocolError, OSError) as err:\n            raise ConnectionError(err, request=request)\n    \n        except MaxRetryError as e:\n            if isinstance(e.reason, ConnectTimeoutError):\n                # TODO: Remove this in 3.0.0: see #2811\n                if not isinstance(e.reason, NewConnectionError):\n                    raise ConnectTimeout(e, request=request)\n    \n            if isinstance(e.reason, ResponseError):\n                raise RetryError(e, request=request)\n    \n            if isinstance(e.reason, _ProxyError):\n                raise ProxyError(e, request=request)\n    \n            if isinstance(e.reason, _SSLError):\n                # This branch is for urllib3 v1.22 and later.\n                raise SSLError(e, request=request)\n    \n&amp;gt;           raise ConnectionError(e, request=request)\nE           requests.exceptions.ConnectionError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927CECF50&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:565: ConnectionError\n\n------------------------------ Captured log call -------------------------------\nDEBUG    urllib3.connectionpool:connectionpool.py:228 Starting new HTTP connection (1): ihrm-test.itheima.net:80\n\n&#34;}], &#34;scripts/test_ihrm_login.py::TestIhrmLogin::test03_pwd_err&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Failed&#34;, &#34;testId&#34;: &#34;scripts/test_ihrm_login.py::TestIhrmLogin::test03_pwd_err&#34;, &#34;duration&#34;: &#34;165 ms&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Failed&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;scripts/test_ihrm_login.py::TestIhrmLogin::test03_pwd_err&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;165 ms&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;self = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927D581D0&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n&amp;gt;           conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:174: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\connection.py:72: in create_connection\n    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nhost = &amp;#x27;ihrm-test.itheima.net&amp;#x27;, port = 80, family = &amp;lt;AddressFamily.AF_UNSPEC: 0&amp;gt;, type = &amp;lt;SocketKind.SOCK_STREAM: 1&amp;gt;, proto = 0, flags = 0\n\n    def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):\n        &amp;quot;&amp;quot;&amp;quot;Resolve host and port into list of address info entries.\n    \n        Translate the host/port argument into a sequence of 5-tuples that contain\n        all the necessary arguments for creating a socket connected to that service.\n        host is a domain name, a string representation of an IPv4/v6 address or\n        None. port is a string service name such as &amp;#x27;http&amp;#x27;, a numeric port number or\n        None. By passing None as the value of host and port, you can pass NULL to\n        the underlying C API.\n    \n        The family, type and proto arguments can be optionally specified in order to\n        narrow the list of addresses returned. Passing zero as a value for each of\n        these arguments selects the full range of results.\n        &amp;quot;&amp;quot;&amp;quot;\n        # We override this function since we want to translate the numeric family\n        # and socket type values to enum constants.\n        addrlist = []\n&amp;gt;       for res in _socket.getaddrinfo(host, port, family, type, proto, flags):\nE       socket.gaierror: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\socket.py:962: gaierror\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927D58450&amp;gt;, method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, body = b&amp;#x27;{&amp;quot;mobile&amp;quot;: &amp;quot;13800000002&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;123456890&amp;quot;}&amp;#x27;\nheaders = {&amp;#x27;User-Agent&amp;#x27;: &amp;#x27;python-requests/2.28.1&amp;#x27;, &amp;#x27;Accept-Encoding&amp;#x27;: &amp;#x27;gzip, deflate&amp;#x27;, &amp;#x27;Accept&amp;#x27;: &amp;#x27;*/*&amp;#x27;, &amp;#x27;Connection&amp;#x27;: &amp;#x27;keep-alive&amp;#x27;, &amp;#x27;Content-Length&amp;#x27;: &amp;#x27;50&amp;#x27;, &amp;#x27;Content-Type&amp;#x27;: &amp;#x27;application/json&amp;#x27;}\nretries = Retry(total=0, connect=None, read=False, redirect=None, status=None), redirect = False, assert_same_host = False, timeout = Timeout(connect=None, read=None, total=None)\npool_timeout = None, release_conn = False, chunked = False, body_pos = None, response_kw = {&amp;#x27;decode_content&amp;#x27;: False, &amp;#x27;preload_content&amp;#x27;: False}\nparsed_url = Url(scheme=None, auth=None, host=None, port=None, path=&amp;#x27;/api/sys/login&amp;#x27;, query=None, fragment=None), destination_scheme = None, conn = None, release_this_conn = True\nhttp_tunnel_required = False, err = None, clean_exit = False\n\n    def urlopen(\n        self,\n        method,\n        url,\n        body=None,\n        headers=None,\n        retries=None,\n        redirect=True,\n        assert_same_host=True,\n        timeout=_Default,\n        pool_timeout=None,\n        release_conn=None,\n        chunked=False,\n        body_pos=None,\n        **response_kw\n    ):\n        &amp;quot;&amp;quot;&amp;quot;\n        Get a connection from the pool and perform an HTTP request. This is the\n        lowest level call for making a request, so you&amp;#x27;ll need to specify all\n        the raw details.\n    \n        .. note::\n    \n           More commonly, it&amp;#x27;s appropriate to use a convenience method provided\n           by :class:`.RequestMethods`, such as :meth:`request`.\n    \n        .. note::\n    \n           `release_conn` will only behave as expected if\n           `preload_content=False` because we want to make\n           `preload_content=False` the default behaviour someday soon without\n           breaking backwards compatibility.\n    \n        :param method:\n            HTTP request method (such as GET, POST, PUT, etc.)\n    \n        :param url:\n            The URL to perform the request on.\n    \n        :param body:\n            Data to send in the request body, either :class:`str`, :class:`bytes`,\n            an iterable of :class:`str`/:class:`bytes`, or a file-like object.\n    \n        :param headers:\n            Dictionary of custom headers to send, such as User-Agent,\n            If-None-Match, etc. If None, pool headers are used. If provided,\n            these headers completely replace any pool-specific headers.\n    \n        :param retries:\n            Configure the number of retries to allow before raising a\n            :class:`~urllib3.exceptions.MaxRetryError` exception.\n    \n            Pass ``None`` to retry until you receive a response. Pass a\n            :class:`~urllib3.util.retry.Retry` object for fine-grained control\n            over different types of retries.\n            Pass an integer number to retry connection errors that many times,\n            but no other types of errors. Pass zero to never retry.\n    \n            If ``False``, then retries are disabled and any exception is raised\n            immediately. Also, instead of raising a MaxRetryError on redirects,\n            the redirect response will be returned.\n    \n        :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.\n    \n        :param redirect:\n            If True, automatically handle redirects (status codes 301, 302,\n            303, 307, 308). Each redirect counts as a retry. Disabling retries\n            will disable redirect, too.\n    \n        :param assert_same_host:\n            If ``True``, will make sure that the host of the pool requests is\n            consistent else will raise HostChangedError. When ``False``, you can\n            use the pool on an HTTP proxy and request foreign hosts.\n    \n        :param timeout:\n            If specified, overrides the default timeout for this one\n            request. It may be a float (in seconds) or an instance of\n            :class:`urllib3.util.Timeout`.\n    \n        :param pool_timeout:\n            If set and the pool is set to block=True, then this method will\n            block for ``pool_timeout`` seconds and raise EmptyPoolError if no\n            connection is available within the time period.\n    \n        :param release_conn:\n            If False, then the urlopen call will not release the connection\n            back into the pool once a response is received (but will release if\n            you read the entire contents of the response such as when\n            `preload_content=True`). This is useful if you&amp;#x27;re not preloading\n            the response&amp;#x27;s content immediately. You will need to call\n            ``r.release_conn()`` on the response ``r`` to return the connection\n            back into the pool. If None, it takes the value of\n            ``response_kw.get(&amp;#x27;preload_content&amp;#x27;, True)``.\n    \n        :param chunked:\n            If True, urllib3 will send the body using chunked transfer\n            encoding. Otherwise, urllib3 will send the body using the standard\n            content-length form. Defaults to False.\n    \n        :param int body_pos:\n            Position to seek to in file-like body in the event of a retry or\n            redirect. Typically this won&amp;#x27;t need to be set because urllib3 will\n            auto-populate the value when needed.\n    \n        :param \\\\**response_kw:\n            Additional parameters are passed to\n            :meth:`urllib3.response.HTTPResponse.from_httplib`\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        parsed_url = parse_url(url)\n        destination_scheme = parsed_url.scheme\n    \n        if headers is None:\n            headers = self.headers\n    \n        if not isinstance(retries, Retry):\n            retries = Retry.from_int(retries, redirect=redirect, default=self.retries)\n    \n        if release_conn is None:\n            release_conn = response_kw.get(&amp;quot;preload_content&amp;quot;, True)\n    \n        # Check host\n        if assert_same_host and not self.is_same_host(url):\n            raise HostChangedError(self, url, retries)\n    \n        # Ensure that the URL we&amp;#x27;re connecting to is properly encoded\n        if url.startswith(&amp;quot;/&amp;quot;):\n            url = six.ensure_str(_encode_target(url))\n        else:\n            url = six.ensure_str(parsed_url.url)\n    \n        conn = None\n    \n        # Track whether `conn` needs to be released before\n        # returning/raising/recursing. Update this variable if necessary, and\n        # leave `release_conn` constant throughout the function. That way, if\n        # the function recurses, the original value of `release_conn` will be\n        # passed down into the recursive call, and its value will be respected.\n        #\n        # See issue #651 [1] for details.\n        #\n        # [1] &amp;lt;https://github.com/urllib3/urllib3/issues/651&amp;gt;\n        release_this_conn = release_conn\n    \n        http_tunnel_required = connection_requires_http_tunnel(\n            self.proxy, self.proxy_config, destination_scheme\n        )\n    \n        # Merge the proxy headers. Only done when not using HTTP CONNECT. We\n        # have to copy the headers dict so we can safely change it without those\n        # changes being reflected in anyone else&amp;#x27;s copy.\n        if not http_tunnel_required:\n            headers = headers.copy()\n            headers.update(self.proxy_headers)\n    \n        # Must keep the exception bound to a separate variable or else Python 3\n        # complains about UnboundLocalError.\n        err = None\n    \n        # Keep track of whether we cleanly exited the except block. This\n        # ensures we do proper cleanup in finally.\n        clean_exit = False\n    \n        # Rewind body position, if needed. Record current position\n        # for future rewinds in the event of a redirect/retry.\n        body_pos = set_file_position(body, body_pos)\n    \n        try:\n            # Request a connection from the queue.\n            timeout_obj = self._get_timeout(timeout)\n            conn = self._get_conn(timeout=pool_timeout)\n    \n            conn.timeout = timeout_obj.connect_timeout\n    \n            is_new_proxy_conn = self.proxy is not None and not getattr(\n                conn, &amp;quot;sock&amp;quot;, None\n            )\n            if is_new_proxy_conn and http_tunnel_required:\n                self._prepare_proxy(conn)\n    \n            # Make the request on the httplib connection object.\n&amp;gt;           httplib_response = self._make_request(\n                conn,\n                method,\n                url,\n                timeout=timeout_obj,\n                body=body,\n                headers=headers,\n                chunked=chunked,\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:703: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:398: in _make_request\n    conn.request(method, url, **httplib_request_kw)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:239: in request\n    super(HTTPConnection, self).request(method, url, body=body, headers=headers)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1282: in request\n    self._send_request(method, url, body, headers, encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1328: in _send_request\n    self.endheaders(body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1277: in endheaders\n    self._send_output(message_body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1037: in _send_output\n    self.send(msg)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:975: in send\n    self.connect()\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:205: in connect\n    conn = self._new_conn()\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927D581D0&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n            conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n    \n        except SocketTimeout:\n            raise ConnectTimeoutError(\n                self,\n                &amp;quot;Connection to %s timed out. (connect timeout=%s)&amp;quot;\n                % (self.host, self.timeout),\n            )\n    \n        except SocketError as e:\n&amp;gt;           raise NewConnectionError(\n                self, &amp;quot;Failed to establish a new connection: %s&amp;quot; % e\n            )\nE           urllib3.exceptions.NewConnectionError: &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927D581D0&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:186: NewConnectionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927D5BB50&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n&amp;gt;               resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:489: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:787: in urlopen\n    retries = retries.increment(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = Retry(total=0, connect=None, read=False, redirect=None, status=None), method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, response = None\nerror = NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927D581D0&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;)\n_pool = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927D58450&amp;gt;, _stacktrace = &amp;lt;traceback object at 0x0000023927D5BD00&amp;gt;\n\n    def increment(\n        self,\n        method=None,\n        url=None,\n        response=None,\n        error=None,\n        _pool=None,\n        _stacktrace=None,\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Return a new Retry object with incremented retry counters.\n    \n        :param response: A response object, or None, if the server did not\n            return a response.\n        :type response: :class:`~urllib3.response.HTTPResponse`\n        :param Exception error: An error encountered during the request, or\n            None if the response was received successfully.\n    \n        :return: A new ``Retry`` object.\n        &amp;quot;&amp;quot;&amp;quot;\n        if self.total is False and error:\n            # Disabled, indicate to re-raise the error.\n            raise six.reraise(type(error), error, _stacktrace)\n    \n        total = self.total\n        if total is not None:\n            total -= 1\n    \n        connect = self.connect\n        read = self.read\n        redirect = self.redirect\n        status_count = self.status\n        other = self.other\n        cause = &amp;quot;unknown&amp;quot;\n        status = None\n        redirect_location = None\n    \n        if error and self._is_connection_error(error):\n            # Connect retry?\n            if connect is False:\n                raise six.reraise(type(error), error, _stacktrace)\n            elif connect is not None:\n                connect -= 1\n    \n        elif error and self._is_read_error(error):\n            # Read retry?\n            if read is False or not self._is_method_retryable(method):\n                raise six.reraise(type(error), error, _stacktrace)\n            elif read is not None:\n                read -= 1\n    \n        elif error:\n            # Other retry?\n            if other is not None:\n                other -= 1\n    \n        elif response and response.get_redirect_location():\n            # Redirect retry?\n            if redirect is not None:\n                redirect -= 1\n            cause = &amp;quot;too many redirects&amp;quot;\n            redirect_location = response.get_redirect_location()\n            status = response.status\n    \n        else:\n            # Incrementing because of a server error like a 500 in\n            # status_forcelist and the given method is in the allowed_methods\n            cause = ResponseError.GENERIC_ERROR\n            if response and response.status:\n                if status_count is not None:\n                    status_count -= 1\n                cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status)\n                status = response.status\n    \n        history = self.history + (\n            RequestHistory(method, url, error, status, redirect_location),\n        )\n    \n        new_retry = self.new(\n            total=total,\n            connect=connect,\n            read=read,\n            redirect=redirect,\n            status=status_count,\n            other=other,\n            history=history,\n        )\n    \n        if new_retry.is_exhausted():\n&amp;gt;           raise MaxRetryError(_pool, url, error or ResponseError(cause))\nE           urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927D581D0&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\retry.py:592: MaxRetryError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;scripts.test_ihrm_login.TestIhrmLogin object at 0x000002392728F250&amp;gt;\n\n    def test03_pwd_err(self):\n        # \u51c6\u5907\u767b\u5f55\u6d4b\u8bd5\u6570\u636e\n        data = {&amp;quot;mobile&amp;quot;: &amp;quot;13800000002&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;123456890&amp;quot;}\n        # \u8c03\u7528 \u81ea\u5df1\u5c01\u88c5\u7684 api\uff0c \u83b7\u53d6\u54cd\u5e94\u7ed3\u679c\n&amp;gt;       resp = IhrmLoginApi.login(data)\n\nscripts\\test_ihrm_login.py:62: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\napi\\ihrm_login_api.py:12: in login\n    resp = requests.post(url=&amp;quot;http://ihrm-test.itheima.net/api/sys/login&amp;quot;, json=req_data)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:115: in post\n    return request(&amp;quot;post&amp;quot;, url, data=data, json=json, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:59: in request\n    return session.request(method=method, url=url, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:587: in request\n    resp = self.send(prep, **send_kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:701: in send\n    r = adapter.send(request, **kwargs)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927D5BB50&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n                resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n    \n            # Send the request.\n            else:\n                if hasattr(conn, &amp;quot;proxy_pool&amp;quot;):\n                    conn = conn.proxy_pool\n    \n                low_conn = conn._get_conn(timeout=DEFAULT_POOL_TIMEOUT)\n    \n                try:\n                    skip_host = &amp;quot;Host&amp;quot; in request.headers\n                    low_conn.putrequest(\n                        request.method,\n                        url,\n                        skip_accept_encoding=True,\n                        skip_host=skip_host,\n                    )\n    \n                    for header, value in request.headers.items():\n                        low_conn.putheader(header, value)\n    \n                    low_conn.endheaders()\n    \n                    for i in request.body:\n                        low_conn.send(hex(len(i))[2:].encode(&amp;quot;utf-8&amp;quot;))\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                        low_conn.send(i)\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                    low_conn.send(b&amp;quot;0\\r\\n\\r\\n&amp;quot;)\n    \n                    # Receive the response from the server\n                    r = low_conn.getresponse()\n    \n                    resp = HTTPResponse.from_httplib(\n                        r,\n                        pool=conn,\n                        connection=low_conn,\n                        preload_content=False,\n                        decode_content=False,\n                    )\n                except Exception:\n                    # If we hit any problems here, clean up the connection.\n                    # Then, raise so that we can handle the actual exception.\n                    low_conn.close()\n                    raise\n    \n        except (ProtocolError, OSError) as err:\n            raise ConnectionError(err, request=request)\n    \n        except MaxRetryError as e:\n            if isinstance(e.reason, ConnectTimeoutError):\n                # TODO: Remove this in 3.0.0: see #2811\n                if not isinstance(e.reason, NewConnectionError):\n                    raise ConnectTimeout(e, request=request)\n    \n            if isinstance(e.reason, ResponseError):\n                raise RetryError(e, request=request)\n    \n            if isinstance(e.reason, _ProxyError):\n                raise ProxyError(e, request=request)\n    \n            if isinstance(e.reason, _SSLError):\n                # This branch is for urllib3 v1.22 and later.\n                raise SSLError(e, request=request)\n    \n&amp;gt;           raise ConnectionError(e, request=request)\nE           requests.exceptions.ConnectionError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927D581D0&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:565: ConnectionError\n\n------------------------------ Captured log call -------------------------------\nDEBUG    urllib3.connectionpool:connectionpool.py:228 Starting new HTTP connection (1): ihrm-test.itheima.net:80\n\n&#34;}], &#34;scripts/test_ihrm_login.py::TestIhrmLogin::test04_mobile_is_none&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Failed&#34;, &#34;testId&#34;: &#34;scripts/test_ihrm_login.py::TestIhrmLogin::test04_mobile_is_none&#34;, &#34;duration&#34;: &#34;178 ms&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Failed&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;scripts/test_ihrm_login.py::TestIhrmLogin::test04_mobile_is_none&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;178 ms&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;self = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927AB5090&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n&amp;gt;           conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:174: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\connection.py:72: in create_connection\n    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nhost = &amp;#x27;ihrm-test.itheima.net&amp;#x27;, port = 80, family = &amp;lt;AddressFamily.AF_UNSPEC: 0&amp;gt;, type = &amp;lt;SocketKind.SOCK_STREAM: 1&amp;gt;, proto = 0, flags = 0\n\n    def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):\n        &amp;quot;&amp;quot;&amp;quot;Resolve host and port into list of address info entries.\n    \n        Translate the host/port argument into a sequence of 5-tuples that contain\n        all the necessary arguments for creating a socket connected to that service.\n        host is a domain name, a string representation of an IPv4/v6 address or\n        None. port is a string service name such as &amp;#x27;http&amp;#x27;, a numeric port number or\n        None. By passing None as the value of host and port, you can pass NULL to\n        the underlying C API.\n    \n        The family, type and proto arguments can be optionally specified in order to\n        narrow the list of addresses returned. Passing zero as a value for each of\n        these arguments selects the full range of results.\n        &amp;quot;&amp;quot;&amp;quot;\n        # We override this function since we want to translate the numeric family\n        # and socket type values to enum constants.\n        addrlist = []\n&amp;gt;       for res in _socket.getaddrinfo(host, port, family, type, proto, flags):\nE       socket.gaierror: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\socket.py:962: gaierror\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927AB5C90&amp;gt;, method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, body = b&amp;#x27;{&amp;quot;mobile&amp;quot;: null, &amp;quot;password&amp;quot;: &amp;quot;123456&amp;quot;}&amp;#x27;\nheaders = {&amp;#x27;User-Agent&amp;#x27;: &amp;#x27;python-requests/2.28.1&amp;#x27;, &amp;#x27;Accept-Encoding&amp;#x27;: &amp;#x27;gzip, deflate&amp;#x27;, &amp;#x27;Accept&amp;#x27;: &amp;#x27;*/*&amp;#x27;, &amp;#x27;Connection&amp;#x27;: &amp;#x27;keep-alive&amp;#x27;, &amp;#x27;Content-Length&amp;#x27;: &amp;#x27;38&amp;#x27;, &amp;#x27;Content-Type&amp;#x27;: &amp;#x27;application/json&amp;#x27;}\nretries = Retry(total=0, connect=None, read=False, redirect=None, status=None), redirect = False, assert_same_host = False, timeout = Timeout(connect=None, read=None, total=None)\npool_timeout = None, release_conn = False, chunked = False, body_pos = None, response_kw = {&amp;#x27;decode_content&amp;#x27;: False, &amp;#x27;preload_content&amp;#x27;: False}\nparsed_url = Url(scheme=None, auth=None, host=None, port=None, path=&amp;#x27;/api/sys/login&amp;#x27;, query=None, fragment=None), destination_scheme = None, conn = None, release_this_conn = True\nhttp_tunnel_required = False, err = None, clean_exit = False\n\n    def urlopen(\n        self,\n        method,\n        url,\n        body=None,\n        headers=None,\n        retries=None,\n        redirect=True,\n        assert_same_host=True,\n        timeout=_Default,\n        pool_timeout=None,\n        release_conn=None,\n        chunked=False,\n        body_pos=None,\n        **response_kw\n    ):\n        &amp;quot;&amp;quot;&amp;quot;\n        Get a connection from the pool and perform an HTTP request. This is the\n        lowest level call for making a request, so you&amp;#x27;ll need to specify all\n        the raw details.\n    \n        .. note::\n    \n           More commonly, it&amp;#x27;s appropriate to use a convenience method provided\n           by :class:`.RequestMethods`, such as :meth:`request`.\n    \n        .. note::\n    \n           `release_conn` will only behave as expected if\n           `preload_content=False` because we want to make\n           `preload_content=False` the default behaviour someday soon without\n           breaking backwards compatibility.\n    \n        :param method:\n            HTTP request method (such as GET, POST, PUT, etc.)\n    \n        :param url:\n            The URL to perform the request on.\n    \n        :param body:\n            Data to send in the request body, either :class:`str`, :class:`bytes`,\n            an iterable of :class:`str`/:class:`bytes`, or a file-like object.\n    \n        :param headers:\n            Dictionary of custom headers to send, such as User-Agent,\n            If-None-Match, etc. If None, pool headers are used. If provided,\n            these headers completely replace any pool-specific headers.\n    \n        :param retries:\n            Configure the number of retries to allow before raising a\n            :class:`~urllib3.exceptions.MaxRetryError` exception.\n    \n            Pass ``None`` to retry until you receive a response. Pass a\n            :class:`~urllib3.util.retry.Retry` object for fine-grained control\n            over different types of retries.\n            Pass an integer number to retry connection errors that many times,\n            but no other types of errors. Pass zero to never retry.\n    \n            If ``False``, then retries are disabled and any exception is raised\n            immediately. Also, instead of raising a MaxRetryError on redirects,\n            the redirect response will be returned.\n    \n        :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.\n    \n        :param redirect:\n            If True, automatically handle redirects (status codes 301, 302,\n            303, 307, 308). Each redirect counts as a retry. Disabling retries\n            will disable redirect, too.\n    \n        :param assert_same_host:\n            If ``True``, will make sure that the host of the pool requests is\n            consistent else will raise HostChangedError. When ``False``, you can\n            use the pool on an HTTP proxy and request foreign hosts.\n    \n        :param timeout:\n            If specified, overrides the default timeout for this one\n            request. It may be a float (in seconds) or an instance of\n            :class:`urllib3.util.Timeout`.\n    \n        :param pool_timeout:\n            If set and the pool is set to block=True, then this method will\n            block for ``pool_timeout`` seconds and raise EmptyPoolError if no\n            connection is available within the time period.\n    \n        :param release_conn:\n            If False, then the urlopen call will not release the connection\n            back into the pool once a response is received (but will release if\n            you read the entire contents of the response such as when\n            `preload_content=True`). This is useful if you&amp;#x27;re not preloading\n            the response&amp;#x27;s content immediately. You will need to call\n            ``r.release_conn()`` on the response ``r`` to return the connection\n            back into the pool. If None, it takes the value of\n            ``response_kw.get(&amp;#x27;preload_content&amp;#x27;, True)``.\n    \n        :param chunked:\n            If True, urllib3 will send the body using chunked transfer\n            encoding. Otherwise, urllib3 will send the body using the standard\n            content-length form. Defaults to False.\n    \n        :param int body_pos:\n            Position to seek to in file-like body in the event of a retry or\n            redirect. Typically this won&amp;#x27;t need to be set because urllib3 will\n            auto-populate the value when needed.\n    \n        :param \\\\**response_kw:\n            Additional parameters are passed to\n            :meth:`urllib3.response.HTTPResponse.from_httplib`\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        parsed_url = parse_url(url)\n        destination_scheme = parsed_url.scheme\n    \n        if headers is None:\n            headers = self.headers\n    \n        if not isinstance(retries, Retry):\n            retries = Retry.from_int(retries, redirect=redirect, default=self.retries)\n    \n        if release_conn is None:\n            release_conn = response_kw.get(&amp;quot;preload_content&amp;quot;, True)\n    \n        # Check host\n        if assert_same_host and not self.is_same_host(url):\n            raise HostChangedError(self, url, retries)\n    \n        # Ensure that the URL we&amp;#x27;re connecting to is properly encoded\n        if url.startswith(&amp;quot;/&amp;quot;):\n            url = six.ensure_str(_encode_target(url))\n        else:\n            url = six.ensure_str(parsed_url.url)\n    \n        conn = None\n    \n        # Track whether `conn` needs to be released before\n        # returning/raising/recursing. Update this variable if necessary, and\n        # leave `release_conn` constant throughout the function. That way, if\n        # the function recurses, the original value of `release_conn` will be\n        # passed down into the recursive call, and its value will be respected.\n        #\n        # See issue #651 [1] for details.\n        #\n        # [1] &amp;lt;https://github.com/urllib3/urllib3/issues/651&amp;gt;\n        release_this_conn = release_conn\n    \n        http_tunnel_required = connection_requires_http_tunnel(\n            self.proxy, self.proxy_config, destination_scheme\n        )\n    \n        # Merge the proxy headers. Only done when not using HTTP CONNECT. We\n        # have to copy the headers dict so we can safely change it without those\n        # changes being reflected in anyone else&amp;#x27;s copy.\n        if not http_tunnel_required:\n            headers = headers.copy()\n            headers.update(self.proxy_headers)\n    \n        # Must keep the exception bound to a separate variable or else Python 3\n        # complains about UnboundLocalError.\n        err = None\n    \n        # Keep track of whether we cleanly exited the except block. This\n        # ensures we do proper cleanup in finally.\n        clean_exit = False\n    \n        # Rewind body position, if needed. Record current position\n        # for future rewinds in the event of a redirect/retry.\n        body_pos = set_file_position(body, body_pos)\n    \n        try:\n            # Request a connection from the queue.\n            timeout_obj = self._get_timeout(timeout)\n            conn = self._get_conn(timeout=pool_timeout)\n    \n            conn.timeout = timeout_obj.connect_timeout\n    \n            is_new_proxy_conn = self.proxy is not None and not getattr(\n                conn, &amp;quot;sock&amp;quot;, None\n            )\n            if is_new_proxy_conn and http_tunnel_required:\n                self._prepare_proxy(conn)\n    \n            # Make the request on the httplib connection object.\n&amp;gt;           httplib_response = self._make_request(\n                conn,\n                method,\n                url,\n                timeout=timeout_obj,\n                body=body,\n                headers=headers,\n                chunked=chunked,\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:703: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:398: in _make_request\n    conn.request(method, url, **httplib_request_kw)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:239: in request\n    super(HTTPConnection, self).request(method, url, body=body, headers=headers)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1282: in request\n    self._send_request(method, url, body, headers, encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1328: in _send_request\n    self.endheaders(body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1277: in endheaders\n    self._send_output(message_body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1037: in _send_output\n    self.send(msg)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:975: in send\n    self.connect()\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:205: in connect\n    conn = self._new_conn()\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927AB5090&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n            conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n    \n        except SocketTimeout:\n            raise ConnectTimeoutError(\n                self,\n                &amp;quot;Connection to %s timed out. (connect timeout=%s)&amp;quot;\n                % (self.host, self.timeout),\n            )\n    \n        except SocketError as e:\n&amp;gt;           raise NewConnectionError(\n                self, &amp;quot;Failed to establish a new connection: %s&amp;quot; % e\n            )\nE           urllib3.exceptions.NewConnectionError: &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927AB5090&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:186: NewConnectionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927AB7010&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n&amp;gt;               resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:489: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:787: in urlopen\n    retries = retries.increment(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = Retry(total=0, connect=None, read=False, redirect=None, status=None), method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, response = None\nerror = NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927AB5090&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;)\n_pool = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927AB5C90&amp;gt;, _stacktrace = &amp;lt;traceback object at 0x0000023927AB4B80&amp;gt;\n\n    def increment(\n        self,\n        method=None,\n        url=None,\n        response=None,\n        error=None,\n        _pool=None,\n        _stacktrace=None,\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Return a new Retry object with incremented retry counters.\n    \n        :param response: A response object, or None, if the server did not\n            return a response.\n        :type response: :class:`~urllib3.response.HTTPResponse`\n        :param Exception error: An error encountered during the request, or\n            None if the response was received successfully.\n    \n        :return: A new ``Retry`` object.\n        &amp;quot;&amp;quot;&amp;quot;\n        if self.total is False and error:\n            # Disabled, indicate to re-raise the error.\n            raise six.reraise(type(error), error, _stacktrace)\n    \n        total = self.total\n        if total is not None:\n            total -= 1\n    \n        connect = self.connect\n        read = self.read\n        redirect = self.redirect\n        status_count = self.status\n        other = self.other\n        cause = &amp;quot;unknown&amp;quot;\n        status = None\n        redirect_location = None\n    \n        if error and self._is_connection_error(error):\n            # Connect retry?\n            if connect is False:\n                raise six.reraise(type(error), error, _stacktrace)\n            elif connect is not None:\n                connect -= 1\n    \n        elif error and self._is_read_error(error):\n            # Read retry?\n            if read is False or not self._is_method_retryable(method):\n                raise six.reraise(type(error), error, _stacktrace)\n            elif read is not None:\n                read -= 1\n    \n        elif error:\n            # Other retry?\n            if other is not None:\n                other -= 1\n    \n        elif response and response.get_redirect_location():\n            # Redirect retry?\n            if redirect is not None:\n                redirect -= 1\n            cause = &amp;quot;too many redirects&amp;quot;\n            redirect_location = response.get_redirect_location()\n            status = response.status\n    \n        else:\n            # Incrementing because of a server error like a 500 in\n            # status_forcelist and the given method is in the allowed_methods\n            cause = ResponseError.GENERIC_ERROR\n            if response and response.status:\n                if status_count is not None:\n                    status_count -= 1\n                cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status)\n                status = response.status\n    \n        history = self.history + (\n            RequestHistory(method, url, error, status, redirect_location),\n        )\n    \n        new_retry = self.new(\n            total=total,\n            connect=connect,\n            read=read,\n            redirect=redirect,\n            status=status_count,\n            other=other,\n            history=history,\n        )\n    \n        if new_retry.is_exhausted():\n&amp;gt;           raise MaxRetryError(_pool, url, error or ResponseError(cause))\nE           urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927AB5090&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\retry.py:592: MaxRetryError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;scripts.test_ihrm_login.TestIhrmLogin object at 0x000002392728F950&amp;gt;\n\n    def test04_mobile_is_none(self):\n        data = {&amp;quot;mobile&amp;quot;: None, &amp;quot;password&amp;quot;: &amp;quot;123456&amp;quot;}\n&amp;gt;       resp = IhrmLoginApi.login(data)\n\nscripts\\test_ihrm_login.py:71: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\napi\\ihrm_login_api.py:12: in login\n    resp = requests.post(url=&amp;quot;http://ihrm-test.itheima.net/api/sys/login&amp;quot;, json=req_data)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:115: in post\n    return request(&amp;quot;post&amp;quot;, url, data=data, json=json, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:59: in request\n    return session.request(method=method, url=url, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:587: in request\n    resp = self.send(prep, **send_kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:701: in send\n    r = adapter.send(request, **kwargs)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927AB7010&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n                resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n    \n            # Send the request.\n            else:\n                if hasattr(conn, &amp;quot;proxy_pool&amp;quot;):\n                    conn = conn.proxy_pool\n    \n                low_conn = conn._get_conn(timeout=DEFAULT_POOL_TIMEOUT)\n    \n                try:\n                    skip_host = &amp;quot;Host&amp;quot; in request.headers\n                    low_conn.putrequest(\n                        request.method,\n                        url,\n                        skip_accept_encoding=True,\n                        skip_host=skip_host,\n                    )\n    \n                    for header, value in request.headers.items():\n                        low_conn.putheader(header, value)\n    \n                    low_conn.endheaders()\n    \n                    for i in request.body:\n                        low_conn.send(hex(len(i))[2:].encode(&amp;quot;utf-8&amp;quot;))\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                        low_conn.send(i)\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                    low_conn.send(b&amp;quot;0\\r\\n\\r\\n&amp;quot;)\n    \n                    # Receive the response from the server\n                    r = low_conn.getresponse()\n    \n                    resp = HTTPResponse.from_httplib(\n                        r,\n                        pool=conn,\n                        connection=low_conn,\n                        preload_content=False,\n                        decode_content=False,\n                    )\n                except Exception:\n                    # If we hit any problems here, clean up the connection.\n                    # Then, raise so that we can handle the actual exception.\n                    low_conn.close()\n                    raise\n    \n        except (ProtocolError, OSError) as err:\n            raise ConnectionError(err, request=request)\n    \n        except MaxRetryError as e:\n            if isinstance(e.reason, ConnectTimeoutError):\n                # TODO: Remove this in 3.0.0: see #2811\n                if not isinstance(e.reason, NewConnectionError):\n                    raise ConnectTimeout(e, request=request)\n    \n            if isinstance(e.reason, ResponseError):\n                raise RetryError(e, request=request)\n    \n            if isinstance(e.reason, _ProxyError):\n                raise ProxyError(e, request=request)\n    \n            if isinstance(e.reason, _SSLError):\n                # This branch is for urllib3 v1.22 and later.\n                raise SSLError(e, request=request)\n    \n&amp;gt;           raise ConnectionError(e, request=request)\nE           requests.exceptions.ConnectionError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927AB5090&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:565: ConnectionError\n\n------------------------------ Captured log call -------------------------------\nDEBUG    urllib3.connectionpool:connectionpool.py:228 Starting new HTTP connection (1): ihrm-test.itheima.net:80\n\n&#34;}], &#34;scripts/test_ihrm_login.py::TestIhrmLogin::test05_mobile_have_special_char&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Failed&#34;, &#34;testId&#34;: &#34;scripts/test_ihrm_login.py::TestIhrmLogin::test05_mobile_have_special_char&#34;, &#34;duration&#34;: &#34;54 ms&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Failed&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;scripts/test_ihrm_login.py::TestIhrmLogin::test05_mobile_have_special_char&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;54 ms&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;self = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927D73890&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n&amp;gt;           conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:174: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\connection.py:72: in create_connection\n    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nhost = &amp;#x27;ihrm-test.itheima.net&amp;#x27;, port = 80, family = &amp;lt;AddressFamily.AF_UNSPEC: 0&amp;gt;, type = &amp;lt;SocketKind.SOCK_STREAM: 1&amp;gt;, proto = 0, flags = 0\n\n    def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):\n        &amp;quot;&amp;quot;&amp;quot;Resolve host and port into list of address info entries.\n    \n        Translate the host/port argument into a sequence of 5-tuples that contain\n        all the necessary arguments for creating a socket connected to that service.\n        host is a domain name, a string representation of an IPv4/v6 address or\n        None. port is a string service name such as &amp;#x27;http&amp;#x27;, a numeric port number or\n        None. By passing None as the value of host and port, you can pass NULL to\n        the underlying C API.\n    \n        The family, type and proto arguments can be optionally specified in order to\n        narrow the list of addresses returned. Passing zero as a value for each of\n        these arguments selects the full range of results.\n        &amp;quot;&amp;quot;&amp;quot;\n        # We override this function since we want to translate the numeric family\n        # and socket type values to enum constants.\n        addrlist = []\n&amp;gt;       for res in _socket.getaddrinfo(host, port, family, type, proto, flags):\nE       socket.gaierror: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\socket.py:962: gaierror\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927D70B90&amp;gt;, method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, body = b&amp;#x27;{&amp;quot;mobile&amp;quot;: &amp;quot;1380abc#002&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;123456&amp;quot;}&amp;#x27;\nheaders = {&amp;#x27;User-Agent&amp;#x27;: &amp;#x27;python-requests/2.28.1&amp;#x27;, &amp;#x27;Accept-Encoding&amp;#x27;: &amp;#x27;gzip, deflate&amp;#x27;, &amp;#x27;Accept&amp;#x27;: &amp;#x27;*/*&amp;#x27;, &amp;#x27;Connection&amp;#x27;: &amp;#x27;keep-alive&amp;#x27;, &amp;#x27;Content-Length&amp;#x27;: &amp;#x27;47&amp;#x27;, &amp;#x27;Content-Type&amp;#x27;: &amp;#x27;application/json&amp;#x27;}\nretries = Retry(total=0, connect=None, read=False, redirect=None, status=None), redirect = False, assert_same_host = False, timeout = Timeout(connect=None, read=None, total=None)\npool_timeout = None, release_conn = False, chunked = False, body_pos = None, response_kw = {&amp;#x27;decode_content&amp;#x27;: False, &amp;#x27;preload_content&amp;#x27;: False}\nparsed_url = Url(scheme=None, auth=None, host=None, port=None, path=&amp;#x27;/api/sys/login&amp;#x27;, query=None, fragment=None), destination_scheme = None, conn = None, release_this_conn = True\nhttp_tunnel_required = False, err = None, clean_exit = False\n\n    def urlopen(\n        self,\n        method,\n        url,\n        body=None,\n        headers=None,\n        retries=None,\n        redirect=True,\n        assert_same_host=True,\n        timeout=_Default,\n        pool_timeout=None,\n        release_conn=None,\n        chunked=False,\n        body_pos=None,\n        **response_kw\n    ):\n        &amp;quot;&amp;quot;&amp;quot;\n        Get a connection from the pool and perform an HTTP request. This is the\n        lowest level call for making a request, so you&amp;#x27;ll need to specify all\n        the raw details.\n    \n        .. note::\n    \n           More commonly, it&amp;#x27;s appropriate to use a convenience method provided\n           by :class:`.RequestMethods`, such as :meth:`request`.\n    \n        .. note::\n    \n           `release_conn` will only behave as expected if\n           `preload_content=False` because we want to make\n           `preload_content=False` the default behaviour someday soon without\n           breaking backwards compatibility.\n    \n        :param method:\n            HTTP request method (such as GET, POST, PUT, etc.)\n    \n        :param url:\n            The URL to perform the request on.\n    \n        :param body:\n            Data to send in the request body, either :class:`str`, :class:`bytes`,\n            an iterable of :class:`str`/:class:`bytes`, or a file-like object.\n    \n        :param headers:\n            Dictionary of custom headers to send, such as User-Agent,\n            If-None-Match, etc. If None, pool headers are used. If provided,\n            these headers completely replace any pool-specific headers.\n    \n        :param retries:\n            Configure the number of retries to allow before raising a\n            :class:`~urllib3.exceptions.MaxRetryError` exception.\n    \n            Pass ``None`` to retry until you receive a response. Pass a\n            :class:`~urllib3.util.retry.Retry` object for fine-grained control\n            over different types of retries.\n            Pass an integer number to retry connection errors that many times,\n            but no other types of errors. Pass zero to never retry.\n    \n            If ``False``, then retries are disabled and any exception is raised\n            immediately. Also, instead of raising a MaxRetryError on redirects,\n            the redirect response will be returned.\n    \n        :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.\n    \n        :param redirect:\n            If True, automatically handle redirects (status codes 301, 302,\n            303, 307, 308). Each redirect counts as a retry. Disabling retries\n            will disable redirect, too.\n    \n        :param assert_same_host:\n            If ``True``, will make sure that the host of the pool requests is\n            consistent else will raise HostChangedError. When ``False``, you can\n            use the pool on an HTTP proxy and request foreign hosts.\n    \n        :param timeout:\n            If specified, overrides the default timeout for this one\n            request. It may be a float (in seconds) or an instance of\n            :class:`urllib3.util.Timeout`.\n    \n        :param pool_timeout:\n            If set and the pool is set to block=True, then this method will\n            block for ``pool_timeout`` seconds and raise EmptyPoolError if no\n            connection is available within the time period.\n    \n        :param release_conn:\n            If False, then the urlopen call will not release the connection\n            back into the pool once a response is received (but will release if\n            you read the entire contents of the response such as when\n            `preload_content=True`). This is useful if you&amp;#x27;re not preloading\n            the response&amp;#x27;s content immediately. You will need to call\n            ``r.release_conn()`` on the response ``r`` to return the connection\n            back into the pool. If None, it takes the value of\n            ``response_kw.get(&amp;#x27;preload_content&amp;#x27;, True)``.\n    \n        :param chunked:\n            If True, urllib3 will send the body using chunked transfer\n            encoding. Otherwise, urllib3 will send the body using the standard\n            content-length form. Defaults to False.\n    \n        :param int body_pos:\n            Position to seek to in file-like body in the event of a retry or\n            redirect. Typically this won&amp;#x27;t need to be set because urllib3 will\n            auto-populate the value when needed.\n    \n        :param \\\\**response_kw:\n            Additional parameters are passed to\n            :meth:`urllib3.response.HTTPResponse.from_httplib`\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        parsed_url = parse_url(url)\n        destination_scheme = parsed_url.scheme\n    \n        if headers is None:\n            headers = self.headers\n    \n        if not isinstance(retries, Retry):\n            retries = Retry.from_int(retries, redirect=redirect, default=self.retries)\n    \n        if release_conn is None:\n            release_conn = response_kw.get(&amp;quot;preload_content&amp;quot;, True)\n    \n        # Check host\n        if assert_same_host and not self.is_same_host(url):\n            raise HostChangedError(self, url, retries)\n    \n        # Ensure that the URL we&amp;#x27;re connecting to is properly encoded\n        if url.startswith(&amp;quot;/&amp;quot;):\n            url = six.ensure_str(_encode_target(url))\n        else:\n            url = six.ensure_str(parsed_url.url)\n    \n        conn = None\n    \n        # Track whether `conn` needs to be released before\n        # returning/raising/recursing. Update this variable if necessary, and\n        # leave `release_conn` constant throughout the function. That way, if\n        # the function recurses, the original value of `release_conn` will be\n        # passed down into the recursive call, and its value will be respected.\n        #\n        # See issue #651 [1] for details.\n        #\n        # [1] &amp;lt;https://github.com/urllib3/urllib3/issues/651&amp;gt;\n        release_this_conn = release_conn\n    \n        http_tunnel_required = connection_requires_http_tunnel(\n            self.proxy, self.proxy_config, destination_scheme\n        )\n    \n        # Merge the proxy headers. Only done when not using HTTP CONNECT. We\n        # have to copy the headers dict so we can safely change it without those\n        # changes being reflected in anyone else&amp;#x27;s copy.\n        if not http_tunnel_required:\n            headers = headers.copy()\n            headers.update(self.proxy_headers)\n    \n        # Must keep the exception bound to a separate variable or else Python 3\n        # complains about UnboundLocalError.\n        err = None\n    \n        # Keep track of whether we cleanly exited the except block. This\n        # ensures we do proper cleanup in finally.\n        clean_exit = False\n    \n        # Rewind body position, if needed. Record current position\n        # for future rewinds in the event of a redirect/retry.\n        body_pos = set_file_position(body, body_pos)\n    \n        try:\n            # Request a connection from the queue.\n            timeout_obj = self._get_timeout(timeout)\n            conn = self._get_conn(timeout=pool_timeout)\n    \n            conn.timeout = timeout_obj.connect_timeout\n    \n            is_new_proxy_conn = self.proxy is not None and not getattr(\n                conn, &amp;quot;sock&amp;quot;, None\n            )\n            if is_new_proxy_conn and http_tunnel_required:\n                self._prepare_proxy(conn)\n    \n            # Make the request on the httplib connection object.\n&amp;gt;           httplib_response = self._make_request(\n                conn,\n                method,\n                url,\n                timeout=timeout_obj,\n                body=body,\n                headers=headers,\n                chunked=chunked,\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:703: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:398: in _make_request\n    conn.request(method, url, **httplib_request_kw)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:239: in request\n    super(HTTPConnection, self).request(method, url, body=body, headers=headers)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1282: in request\n    self._send_request(method, url, body, headers, encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1328: in _send_request\n    self.endheaders(body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1277: in endheaders\n    self._send_output(message_body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1037: in _send_output\n    self.send(msg)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:975: in send\n    self.connect()\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:205: in connect\n    conn = self._new_conn()\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927D73890&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n            conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n    \n        except SocketTimeout:\n            raise ConnectTimeoutError(\n                self,\n                &amp;quot;Connection to %s timed out. (connect timeout=%s)&amp;quot;\n                % (self.host, self.timeout),\n            )\n    \n        except SocketError as e:\n&amp;gt;           raise NewConnectionError(\n                self, &amp;quot;Failed to establish a new connection: %s&amp;quot; % e\n            )\nE           urllib3.exceptions.NewConnectionError: &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927D73890&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:186: NewConnectionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927D73F50&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n&amp;gt;               resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:489: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:787: in urlopen\n    retries = retries.increment(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = Retry(total=0, connect=None, read=False, redirect=None, status=None), method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, response = None\nerror = NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927D73890&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;)\n_pool = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927D70B90&amp;gt;, _stacktrace = &amp;lt;traceback object at 0x0000023927D70900&amp;gt;\n\n    def increment(\n        self,\n        method=None,\n        url=None,\n        response=None,\n        error=None,\n        _pool=None,\n        _stacktrace=None,\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Return a new Retry object with incremented retry counters.\n    \n        :param response: A response object, or None, if the server did not\n            return a response.\n        :type response: :class:`~urllib3.response.HTTPResponse`\n        :param Exception error: An error encountered during the request, or\n            None if the response was received successfully.\n    \n        :return: A new ``Retry`` object.\n        &amp;quot;&amp;quot;&amp;quot;\n        if self.total is False and error:\n            # Disabled, indicate to re-raise the error.\n            raise six.reraise(type(error), error, _stacktrace)\n    \n        total = self.total\n        if total is not None:\n            total -= 1\n    \n        connect = self.connect\n        read = self.read\n        redirect = self.redirect\n        status_count = self.status\n        other = self.other\n        cause = &amp;quot;unknown&amp;quot;\n        status = None\n        redirect_location = None\n    \n        if error and self._is_connection_error(error):\n            # Connect retry?\n            if connect is False:\n                raise six.reraise(type(error), error, _stacktrace)\n            elif connect is not None:\n                connect -= 1\n    \n        elif error and self._is_read_error(error):\n            # Read retry?\n            if read is False or not self._is_method_retryable(method):\n                raise six.reraise(type(error), error, _stacktrace)\n            elif read is not None:\n                read -= 1\n    \n        elif error:\n            # Other retry?\n            if other is not None:\n                other -= 1\n    \n        elif response and response.get_redirect_location():\n            # Redirect retry?\n            if redirect is not None:\n                redirect -= 1\n            cause = &amp;quot;too many redirects&amp;quot;\n            redirect_location = response.get_redirect_location()\n            status = response.status\n    \n        else:\n            # Incrementing because of a server error like a 500 in\n            # status_forcelist and the given method is in the allowed_methods\n            cause = ResponseError.GENERIC_ERROR\n            if response and response.status:\n                if status_count is not None:\n                    status_count -= 1\n                cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status)\n                status = response.status\n    \n        history = self.history + (\n            RequestHistory(method, url, error, status, redirect_location),\n        )\n    \n        new_retry = self.new(\n            total=total,\n            connect=connect,\n            read=read,\n            redirect=redirect,\n            status=status_count,\n            other=other,\n            history=history,\n        )\n    \n        if new_retry.is_exhausted():\n&amp;gt;           raise MaxRetryError(_pool, url, error or ResponseError(cause))\nE           urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927D73890&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\retry.py:592: MaxRetryError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;scripts.test_ihrm_login.TestIhrmLogin object at 0x0000023927298050&amp;gt;\n\n    def test05_mobile_have_special_char(self):\n        data = {&amp;quot;mobile&amp;quot;: &amp;quot;1380abc#002&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;123456&amp;quot;}\n&amp;gt;       resp = IhrmLoginApi.login(data)\n\nscripts\\test_ihrm_login.py:77: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\napi\\ihrm_login_api.py:12: in login\n    resp = requests.post(url=&amp;quot;http://ihrm-test.itheima.net/api/sys/login&amp;quot;, json=req_data)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:115: in post\n    return request(&amp;quot;post&amp;quot;, url, data=data, json=json, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:59: in request\n    return session.request(method=method, url=url, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:587: in request\n    resp = self.send(prep, **send_kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:701: in send\n    r = adapter.send(request, **kwargs)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927D73F50&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n                resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n    \n            # Send the request.\n            else:\n                if hasattr(conn, &amp;quot;proxy_pool&amp;quot;):\n                    conn = conn.proxy_pool\n    \n                low_conn = conn._get_conn(timeout=DEFAULT_POOL_TIMEOUT)\n    \n                try:\n                    skip_host = &amp;quot;Host&amp;quot; in request.headers\n                    low_conn.putrequest(\n                        request.method,\n                        url,\n                        skip_accept_encoding=True,\n                        skip_host=skip_host,\n                    )\n    \n                    for header, value in request.headers.items():\n                        low_conn.putheader(header, value)\n    \n                    low_conn.endheaders()\n    \n                    for i in request.body:\n                        low_conn.send(hex(len(i))[2:].encode(&amp;quot;utf-8&amp;quot;))\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                        low_conn.send(i)\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                    low_conn.send(b&amp;quot;0\\r\\n\\r\\n&amp;quot;)\n    \n                    # Receive the response from the server\n                    r = low_conn.getresponse()\n    \n                    resp = HTTPResponse.from_httplib(\n                        r,\n                        pool=conn,\n                        connection=low_conn,\n                        preload_content=False,\n                        decode_content=False,\n                    )\n                except Exception:\n                    # If we hit any problems here, clean up the connection.\n                    # Then, raise so that we can handle the actual exception.\n                    low_conn.close()\n                    raise\n    \n        except (ProtocolError, OSError) as err:\n            raise ConnectionError(err, request=request)\n    \n        except MaxRetryError as e:\n            if isinstance(e.reason, ConnectTimeoutError):\n                # TODO: Remove this in 3.0.0: see #2811\n                if not isinstance(e.reason, NewConnectionError):\n                    raise ConnectTimeout(e, request=request)\n    \n            if isinstance(e.reason, ResponseError):\n                raise RetryError(e, request=request)\n    \n            if isinstance(e.reason, _ProxyError):\n                raise ProxyError(e, request=request)\n    \n            if isinstance(e.reason, _SSLError):\n                # This branch is for urllib3 v1.22 and later.\n                raise SSLError(e, request=request)\n    \n&amp;gt;           raise ConnectionError(e, request=request)\nE           requests.exceptions.ConnectionError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927D73890&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:565: ConnectionError\n\n------------------------------ Captured log call -------------------------------\nDEBUG    urllib3.connectionpool:connectionpool.py:228 Starting new HTTP connection (1): ihrm-test.itheima.net:80\n\n&#34;}], &#34;scripts/test_ihrm_login.py::TestIhrmLogin::test06_10_mobile&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Failed&#34;, &#34;testId&#34;: &#34;scripts/test_ihrm_login.py::TestIhrmLogin::test06_10_mobile&#34;, &#34;duration&#34;: &#34;54 ms&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Failed&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;scripts/test_ihrm_login.py::TestIhrmLogin::test06_10_mobile&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;54 ms&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;self = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927A1D350&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n&amp;gt;           conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:174: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\connection.py:72: in create_connection\n    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nhost = &amp;#x27;ihrm-test.itheima.net&amp;#x27;, port = 80, family = &amp;lt;AddressFamily.AF_UNSPEC: 0&amp;gt;, type = &amp;lt;SocketKind.SOCK_STREAM: 1&amp;gt;, proto = 0, flags = 0\n\n    def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):\n        &amp;quot;&amp;quot;&amp;quot;Resolve host and port into list of address info entries.\n    \n        Translate the host/port argument into a sequence of 5-tuples that contain\n        all the necessary arguments for creating a socket connected to that service.\n        host is a domain name, a string representation of an IPv4/v6 address or\n        None. port is a string service name such as &amp;#x27;http&amp;#x27;, a numeric port number or\n        None. By passing None as the value of host and port, you can pass NULL to\n        the underlying C API.\n    \n        The family, type and proto arguments can be optionally specified in order to\n        narrow the list of addresses returned. Passing zero as a value for each of\n        these arguments selects the full range of results.\n        &amp;quot;&amp;quot;&amp;quot;\n        # We override this function since we want to translate the numeric family\n        # and socket type values to enum constants.\n        addrlist = []\n&amp;gt;       for res in _socket.getaddrinfo(host, port, family, type, proto, flags):\nE       socket.gaierror: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\socket.py:962: gaierror\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927A1CD10&amp;gt;, method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, body = b&amp;#x27;{&amp;quot;mobile&amp;quot;: &amp;quot;1380000000&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;123456&amp;quot;}&amp;#x27;\nheaders = {&amp;#x27;User-Agent&amp;#x27;: &amp;#x27;python-requests/2.28.1&amp;#x27;, &amp;#x27;Accept-Encoding&amp;#x27;: &amp;#x27;gzip, deflate&amp;#x27;, &amp;#x27;Accept&amp;#x27;: &amp;#x27;*/*&amp;#x27;, &amp;#x27;Connection&amp;#x27;: &amp;#x27;keep-alive&amp;#x27;, &amp;#x27;Content-Length&amp;#x27;: &amp;#x27;46&amp;#x27;, &amp;#x27;Content-Type&amp;#x27;: &amp;#x27;application/json&amp;#x27;}\nretries = Retry(total=0, connect=None, read=False, redirect=None, status=None), redirect = False, assert_same_host = False, timeout = Timeout(connect=None, read=None, total=None)\npool_timeout = None, release_conn = False, chunked = False, body_pos = None, response_kw = {&amp;#x27;decode_content&amp;#x27;: False, &amp;#x27;preload_content&amp;#x27;: False}\nparsed_url = Url(scheme=None, auth=None, host=None, port=None, path=&amp;#x27;/api/sys/login&amp;#x27;, query=None, fragment=None), destination_scheme = None, conn = None, release_this_conn = True\nhttp_tunnel_required = False, err = None, clean_exit = False\n\n    def urlopen(\n        self,\n        method,\n        url,\n        body=None,\n        headers=None,\n        retries=None,\n        redirect=True,\n        assert_same_host=True,\n        timeout=_Default,\n        pool_timeout=None,\n        release_conn=None,\n        chunked=False,\n        body_pos=None,\n        **response_kw\n    ):\n        &amp;quot;&amp;quot;&amp;quot;\n        Get a connection from the pool and perform an HTTP request. This is the\n        lowest level call for making a request, so you&amp;#x27;ll need to specify all\n        the raw details.\n    \n        .. note::\n    \n           More commonly, it&amp;#x27;s appropriate to use a convenience method provided\n           by :class:`.RequestMethods`, such as :meth:`request`.\n    \n        .. note::\n    \n           `release_conn` will only behave as expected if\n           `preload_content=False` because we want to make\n           `preload_content=False` the default behaviour someday soon without\n           breaking backwards compatibility.\n    \n        :param method:\n            HTTP request method (such as GET, POST, PUT, etc.)\n    \n        :param url:\n            The URL to perform the request on.\n    \n        :param body:\n            Data to send in the request body, either :class:`str`, :class:`bytes`,\n            an iterable of :class:`str`/:class:`bytes`, or a file-like object.\n    \n        :param headers:\n            Dictionary of custom headers to send, such as User-Agent,\n            If-None-Match, etc. If None, pool headers are used. If provided,\n            these headers completely replace any pool-specific headers.\n    \n        :param retries:\n            Configure the number of retries to allow before raising a\n            :class:`~urllib3.exceptions.MaxRetryError` exception.\n    \n            Pass ``None`` to retry until you receive a response. Pass a\n            :class:`~urllib3.util.retry.Retry` object for fine-grained control\n            over different types of retries.\n            Pass an integer number to retry connection errors that many times,\n            but no other types of errors. Pass zero to never retry.\n    \n            If ``False``, then retries are disabled and any exception is raised\n            immediately. Also, instead of raising a MaxRetryError on redirects,\n            the redirect response will be returned.\n    \n        :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.\n    \n        :param redirect:\n            If True, automatically handle redirects (status codes 301, 302,\n            303, 307, 308). Each redirect counts as a retry. Disabling retries\n            will disable redirect, too.\n    \n        :param assert_same_host:\n            If ``True``, will make sure that the host of the pool requests is\n            consistent else will raise HostChangedError. When ``False``, you can\n            use the pool on an HTTP proxy and request foreign hosts.\n    \n        :param timeout:\n            If specified, overrides the default timeout for this one\n            request. It may be a float (in seconds) or an instance of\n            :class:`urllib3.util.Timeout`.\n    \n        :param pool_timeout:\n            If set and the pool is set to block=True, then this method will\n            block for ``pool_timeout`` seconds and raise EmptyPoolError if no\n            connection is available within the time period.\n    \n        :param release_conn:\n            If False, then the urlopen call will not release the connection\n            back into the pool once a response is received (but will release if\n            you read the entire contents of the response such as when\n            `preload_content=True`). This is useful if you&amp;#x27;re not preloading\n            the response&amp;#x27;s content immediately. You will need to call\n            ``r.release_conn()`` on the response ``r`` to return the connection\n            back into the pool. If None, it takes the value of\n            ``response_kw.get(&amp;#x27;preload_content&amp;#x27;, True)``.\n    \n        :param chunked:\n            If True, urllib3 will send the body using chunked transfer\n            encoding. Otherwise, urllib3 will send the body using the standard\n            content-length form. Defaults to False.\n    \n        :param int body_pos:\n            Position to seek to in file-like body in the event of a retry or\n            redirect. Typically this won&amp;#x27;t need to be set because urllib3 will\n            auto-populate the value when needed.\n    \n        :param \\\\**response_kw:\n            Additional parameters are passed to\n            :meth:`urllib3.response.HTTPResponse.from_httplib`\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        parsed_url = parse_url(url)\n        destination_scheme = parsed_url.scheme\n    \n        if headers is None:\n            headers = self.headers\n    \n        if not isinstance(retries, Retry):\n            retries = Retry.from_int(retries, redirect=redirect, default=self.retries)\n    \n        if release_conn is None:\n            release_conn = response_kw.get(&amp;quot;preload_content&amp;quot;, True)\n    \n        # Check host\n        if assert_same_host and not self.is_same_host(url):\n            raise HostChangedError(self, url, retries)\n    \n        # Ensure that the URL we&amp;#x27;re connecting to is properly encoded\n        if url.startswith(&amp;quot;/&amp;quot;):\n            url = six.ensure_str(_encode_target(url))\n        else:\n            url = six.ensure_str(parsed_url.url)\n    \n        conn = None\n    \n        # Track whether `conn` needs to be released before\n        # returning/raising/recursing. Update this variable if necessary, and\n        # leave `release_conn` constant throughout the function. That way, if\n        # the function recurses, the original value of `release_conn` will be\n        # passed down into the recursive call, and its value will be respected.\n        #\n        # See issue #651 [1] for details.\n        #\n        # [1] &amp;lt;https://github.com/urllib3/urllib3/issues/651&amp;gt;\n        release_this_conn = release_conn\n    \n        http_tunnel_required = connection_requires_http_tunnel(\n            self.proxy, self.proxy_config, destination_scheme\n        )\n    \n        # Merge the proxy headers. Only done when not using HTTP CONNECT. We\n        # have to copy the headers dict so we can safely change it without those\n        # changes being reflected in anyone else&amp;#x27;s copy.\n        if not http_tunnel_required:\n            headers = headers.copy()\n            headers.update(self.proxy_headers)\n    \n        # Must keep the exception bound to a separate variable or else Python 3\n        # complains about UnboundLocalError.\n        err = None\n    \n        # Keep track of whether we cleanly exited the except block. This\n        # ensures we do proper cleanup in finally.\n        clean_exit = False\n    \n        # Rewind body position, if needed. Record current position\n        # for future rewinds in the event of a redirect/retry.\n        body_pos = set_file_position(body, body_pos)\n    \n        try:\n            # Request a connection from the queue.\n            timeout_obj = self._get_timeout(timeout)\n            conn = self._get_conn(timeout=pool_timeout)\n    \n            conn.timeout = timeout_obj.connect_timeout\n    \n            is_new_proxy_conn = self.proxy is not None and not getattr(\n                conn, &amp;quot;sock&amp;quot;, None\n            )\n            if is_new_proxy_conn and http_tunnel_required:\n                self._prepare_proxy(conn)\n    \n            # Make the request on the httplib connection object.\n&amp;gt;           httplib_response = self._make_request(\n                conn,\n                method,\n                url,\n                timeout=timeout_obj,\n                body=body,\n                headers=headers,\n                chunked=chunked,\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:703: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:398: in _make_request\n    conn.request(method, url, **httplib_request_kw)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:239: in request\n    super(HTTPConnection, self).request(method, url, body=body, headers=headers)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1282: in request\n    self._send_request(method, url, body, headers, encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1328: in _send_request\n    self.endheaders(body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1277: in endheaders\n    self._send_output(message_body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1037: in _send_output\n    self.send(msg)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:975: in send\n    self.connect()\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:205: in connect\n    conn = self._new_conn()\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927A1D350&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n            conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n    \n        except SocketTimeout:\n            raise ConnectTimeoutError(\n                self,\n                &amp;quot;Connection to %s timed out. (connect timeout=%s)&amp;quot;\n                % (self.host, self.timeout),\n            )\n    \n        except SocketError as e:\n&amp;gt;           raise NewConnectionError(\n                self, &amp;quot;Failed to establish a new connection: %s&amp;quot; % e\n            )\nE           urllib3.exceptions.NewConnectionError: &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927A1D350&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:186: NewConnectionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927A1C110&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n&amp;gt;               resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:489: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:787: in urlopen\n    retries = retries.increment(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = Retry(total=0, connect=None, read=False, redirect=None, status=None), method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, response = None\nerror = NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927A1D350&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;)\n_pool = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927A1CD10&amp;gt;, _stacktrace = &amp;lt;traceback object at 0x0000023927C35280&amp;gt;\n\n    def increment(\n        self,\n        method=None,\n        url=None,\n        response=None,\n        error=None,\n        _pool=None,\n        _stacktrace=None,\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Return a new Retry object with incremented retry counters.\n    \n        :param response: A response object, or None, if the server did not\n            return a response.\n        :type response: :class:`~urllib3.response.HTTPResponse`\n        :param Exception error: An error encountered during the request, or\n            None if the response was received successfully.\n    \n        :return: A new ``Retry`` object.\n        &amp;quot;&amp;quot;&amp;quot;\n        if self.total is False and error:\n            # Disabled, indicate to re-raise the error.\n            raise six.reraise(type(error), error, _stacktrace)\n    \n        total = self.total\n        if total is not None:\n            total -= 1\n    \n        connect = self.connect\n        read = self.read\n        redirect = self.redirect\n        status_count = self.status\n        other = self.other\n        cause = &amp;quot;unknown&amp;quot;\n        status = None\n        redirect_location = None\n    \n        if error and self._is_connection_error(error):\n            # Connect retry?\n            if connect is False:\n                raise six.reraise(type(error), error, _stacktrace)\n            elif connect is not None:\n                connect -= 1\n    \n        elif error and self._is_read_error(error):\n            # Read retry?\n            if read is False or not self._is_method_retryable(method):\n                raise six.reraise(type(error), error, _stacktrace)\n            elif read is not None:\n                read -= 1\n    \n        elif error:\n            # Other retry?\n            if other is not None:\n                other -= 1\n    \n        elif response and response.get_redirect_location():\n            # Redirect retry?\n            if redirect is not None:\n                redirect -= 1\n            cause = &amp;quot;too many redirects&amp;quot;\n            redirect_location = response.get_redirect_location()\n            status = response.status\n    \n        else:\n            # Incrementing because of a server error like a 500 in\n            # status_forcelist and the given method is in the allowed_methods\n            cause = ResponseError.GENERIC_ERROR\n            if response and response.status:\n                if status_count is not None:\n                    status_count -= 1\n                cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status)\n                status = response.status\n    \n        history = self.history + (\n            RequestHistory(method, url, error, status, redirect_location),\n        )\n    \n        new_retry = self.new(\n            total=total,\n            connect=connect,\n            read=read,\n            redirect=redirect,\n            status=status_count,\n            other=other,\n            history=history,\n        )\n    \n        if new_retry.is_exhausted():\n&amp;gt;           raise MaxRetryError(_pool, url, error or ResponseError(cause))\nE           urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927A1D350&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\retry.py:592: MaxRetryError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;scripts.test_ihrm_login.TestIhrmLogin object at 0x0000023927298710&amp;gt;\n\n    def test06_10_mobile(self):\n        data = {&amp;quot;mobile&amp;quot;: &amp;quot;1380000000&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;123456&amp;quot;}\n&amp;gt;       resp = IhrmLoginApi.login(data)\n\nscripts\\test_ihrm_login.py:83: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\napi\\ihrm_login_api.py:12: in login\n    resp = requests.post(url=&amp;quot;http://ihrm-test.itheima.net/api/sys/login&amp;quot;, json=req_data)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:115: in post\n    return request(&amp;quot;post&amp;quot;, url, data=data, json=json, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:59: in request\n    return session.request(method=method, url=url, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:587: in request\n    resp = self.send(prep, **send_kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:701: in send\n    r = adapter.send(request, **kwargs)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927A1C110&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n                resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n    \n            # Send the request.\n            else:\n                if hasattr(conn, &amp;quot;proxy_pool&amp;quot;):\n                    conn = conn.proxy_pool\n    \n                low_conn = conn._get_conn(timeout=DEFAULT_POOL_TIMEOUT)\n    \n                try:\n                    skip_host = &amp;quot;Host&amp;quot; in request.headers\n                    low_conn.putrequest(\n                        request.method,\n                        url,\n                        skip_accept_encoding=True,\n                        skip_host=skip_host,\n                    )\n    \n                    for header, value in request.headers.items():\n                        low_conn.putheader(header, value)\n    \n                    low_conn.endheaders()\n    \n                    for i in request.body:\n                        low_conn.send(hex(len(i))[2:].encode(&amp;quot;utf-8&amp;quot;))\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                        low_conn.send(i)\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                    low_conn.send(b&amp;quot;0\\r\\n\\r\\n&amp;quot;)\n    \n                    # Receive the response from the server\n                    r = low_conn.getresponse()\n    \n                    resp = HTTPResponse.from_httplib(\n                        r,\n                        pool=conn,\n                        connection=low_conn,\n                        preload_content=False,\n                        decode_content=False,\n                    )\n                except Exception:\n                    # If we hit any problems here, clean up the connection.\n                    # Then, raise so that we can handle the actual exception.\n                    low_conn.close()\n                    raise\n    \n        except (ProtocolError, OSError) as err:\n            raise ConnectionError(err, request=request)\n    \n        except MaxRetryError as e:\n            if isinstance(e.reason, ConnectTimeoutError):\n                # TODO: Remove this in 3.0.0: see #2811\n                if not isinstance(e.reason, NewConnectionError):\n                    raise ConnectTimeout(e, request=request)\n    \n            if isinstance(e.reason, ResponseError):\n                raise RetryError(e, request=request)\n    \n            if isinstance(e.reason, _ProxyError):\n                raise ProxyError(e, request=request)\n    \n            if isinstance(e.reason, _SSLError):\n                # This branch is for urllib3 v1.22 and later.\n                raise SSLError(e, request=request)\n    \n&amp;gt;           raise ConnectionError(e, request=request)\nE           requests.exceptions.ConnectionError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927A1D350&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:565: ConnectionError\n\n------------------------------ Captured log call -------------------------------\nDEBUG    urllib3.connectionpool:connectionpool.py:228 Starting new HTTP connection (1): ihrm-test.itheima.net:80\n\n&#34;}], &#34;scripts/test_ihrm_login.py::TestIhrmLogin::test07_12_mobile&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Failed&#34;, &#34;testId&#34;: &#34;scripts/test_ihrm_login.py::TestIhrmLogin::test07_12_mobile&#34;, &#34;duration&#34;: &#34;43 ms&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Failed&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;scripts/test_ihrm_login.py::TestIhrmLogin::test07_12_mobile&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;43 ms&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;self = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927B3B5D0&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n&amp;gt;           conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:174: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\connection.py:72: in create_connection\n    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nhost = &amp;#x27;ihrm-test.itheima.net&amp;#x27;, port = 80, family = &amp;lt;AddressFamily.AF_UNSPEC: 0&amp;gt;, type = &amp;lt;SocketKind.SOCK_STREAM: 1&amp;gt;, proto = 0, flags = 0\n\n    def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):\n        &amp;quot;&amp;quot;&amp;quot;Resolve host and port into list of address info entries.\n    \n        Translate the host/port argument into a sequence of 5-tuples that contain\n        all the necessary arguments for creating a socket connected to that service.\n        host is a domain name, a string representation of an IPv4/v6 address or\n        None. port is a string service name such as &amp;#x27;http&amp;#x27;, a numeric port number or\n        None. By passing None as the value of host and port, you can pass NULL to\n        the underlying C API.\n    \n        The family, type and proto arguments can be optionally specified in order to\n        narrow the list of addresses returned. Passing zero as a value for each of\n        these arguments selects the full range of results.\n        &amp;quot;&amp;quot;&amp;quot;\n        # We override this function since we want to translate the numeric family\n        # and socket type values to enum constants.\n        addrlist = []\n&amp;gt;       for res in _socket.getaddrinfo(host, port, family, type, proto, flags):\nE       socket.gaierror: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\socket.py:962: gaierror\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927B38090&amp;gt;, method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, body = b&amp;#x27;{&amp;quot;mobile&amp;quot;: &amp;quot;138000000034&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;123456&amp;quot;}&amp;#x27;\nheaders = {&amp;#x27;User-Agent&amp;#x27;: &amp;#x27;python-requests/2.28.1&amp;#x27;, &amp;#x27;Accept-Encoding&amp;#x27;: &amp;#x27;gzip, deflate&amp;#x27;, &amp;#x27;Accept&amp;#x27;: &amp;#x27;*/*&amp;#x27;, &amp;#x27;Connection&amp;#x27;: &amp;#x27;keep-alive&amp;#x27;, &amp;#x27;Content-Length&amp;#x27;: &amp;#x27;48&amp;#x27;, &amp;#x27;Content-Type&amp;#x27;: &amp;#x27;application/json&amp;#x27;}\nretries = Retry(total=0, connect=None, read=False, redirect=None, status=None), redirect = False, assert_same_host = False, timeout = Timeout(connect=None, read=None, total=None)\npool_timeout = None, release_conn = False, chunked = False, body_pos = None, response_kw = {&amp;#x27;decode_content&amp;#x27;: False, &amp;#x27;preload_content&amp;#x27;: False}\nparsed_url = Url(scheme=None, auth=None, host=None, port=None, path=&amp;#x27;/api/sys/login&amp;#x27;, query=None, fragment=None), destination_scheme = None, conn = None, release_this_conn = True\nhttp_tunnel_required = False, err = None, clean_exit = False\n\n    def urlopen(\n        self,\n        method,\n        url,\n        body=None,\n        headers=None,\n        retries=None,\n        redirect=True,\n        assert_same_host=True,\n        timeout=_Default,\n        pool_timeout=None,\n        release_conn=None,\n        chunked=False,\n        body_pos=None,\n        **response_kw\n    ):\n        &amp;quot;&amp;quot;&amp;quot;\n        Get a connection from the pool and perform an HTTP request. This is the\n        lowest level call for making a request, so you&amp;#x27;ll need to specify all\n        the raw details.\n    \n        .. note::\n    \n           More commonly, it&amp;#x27;s appropriate to use a convenience method provided\n           by :class:`.RequestMethods`, such as :meth:`request`.\n    \n        .. note::\n    \n           `release_conn` will only behave as expected if\n           `preload_content=False` because we want to make\n           `preload_content=False` the default behaviour someday soon without\n           breaking backwards compatibility.\n    \n        :param method:\n            HTTP request method (such as GET, POST, PUT, etc.)\n    \n        :param url:\n            The URL to perform the request on.\n    \n        :param body:\n            Data to send in the request body, either :class:`str`, :class:`bytes`,\n            an iterable of :class:`str`/:class:`bytes`, or a file-like object.\n    \n        :param headers:\n            Dictionary of custom headers to send, such as User-Agent,\n            If-None-Match, etc. If None, pool headers are used. If provided,\n            these headers completely replace any pool-specific headers.\n    \n        :param retries:\n            Configure the number of retries to allow before raising a\n            :class:`~urllib3.exceptions.MaxRetryError` exception.\n    \n            Pass ``None`` to retry until you receive a response. Pass a\n            :class:`~urllib3.util.retry.Retry` object for fine-grained control\n            over different types of retries.\n            Pass an integer number to retry connection errors that many times,\n            but no other types of errors. Pass zero to never retry.\n    \n            If ``False``, then retries are disabled and any exception is raised\n            immediately. Also, instead of raising a MaxRetryError on redirects,\n            the redirect response will be returned.\n    \n        :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.\n    \n        :param redirect:\n            If True, automatically handle redirects (status codes 301, 302,\n            303, 307, 308). Each redirect counts as a retry. Disabling retries\n            will disable redirect, too.\n    \n        :param assert_same_host:\n            If ``True``, will make sure that the host of the pool requests is\n            consistent else will raise HostChangedError. When ``False``, you can\n            use the pool on an HTTP proxy and request foreign hosts.\n    \n        :param timeout:\n            If specified, overrides the default timeout for this one\n            request. It may be a float (in seconds) or an instance of\n            :class:`urllib3.util.Timeout`.\n    \n        :param pool_timeout:\n            If set and the pool is set to block=True, then this method will\n            block for ``pool_timeout`` seconds and raise EmptyPoolError if no\n            connection is available within the time period.\n    \n        :param release_conn:\n            If False, then the urlopen call will not release the connection\n            back into the pool once a response is received (but will release if\n            you read the entire contents of the response such as when\n            `preload_content=True`). This is useful if you&amp;#x27;re not preloading\n            the response&amp;#x27;s content immediately. You will need to call\n            ``r.release_conn()`` on the response ``r`` to return the connection\n            back into the pool. If None, it takes the value of\n            ``response_kw.get(&amp;#x27;preload_content&amp;#x27;, True)``.\n    \n        :param chunked:\n            If True, urllib3 will send the body using chunked transfer\n            encoding. Otherwise, urllib3 will send the body using the standard\n            content-length form. Defaults to False.\n    \n        :param int body_pos:\n            Position to seek to in file-like body in the event of a retry or\n            redirect. Typically this won&amp;#x27;t need to be set because urllib3 will\n            auto-populate the value when needed.\n    \n        :param \\\\**response_kw:\n            Additional parameters are passed to\n            :meth:`urllib3.response.HTTPResponse.from_httplib`\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        parsed_url = parse_url(url)\n        destination_scheme = parsed_url.scheme\n    \n        if headers is None:\n            headers = self.headers\n    \n        if not isinstance(retries, Retry):\n            retries = Retry.from_int(retries, redirect=redirect, default=self.retries)\n    \n        if release_conn is None:\n            release_conn = response_kw.get(&amp;quot;preload_content&amp;quot;, True)\n    \n        # Check host\n        if assert_same_host and not self.is_same_host(url):\n            raise HostChangedError(self, url, retries)\n    \n        # Ensure that the URL we&amp;#x27;re connecting to is properly encoded\n        if url.startswith(&amp;quot;/&amp;quot;):\n            url = six.ensure_str(_encode_target(url))\n        else:\n            url = six.ensure_str(parsed_url.url)\n    \n        conn = None\n    \n        # Track whether `conn` needs to be released before\n        # returning/raising/recursing. Update this variable if necessary, and\n        # leave `release_conn` constant throughout the function. That way, if\n        # the function recurses, the original value of `release_conn` will be\n        # passed down into the recursive call, and its value will be respected.\n        #\n        # See issue #651 [1] for details.\n        #\n        # [1] &amp;lt;https://github.com/urllib3/urllib3/issues/651&amp;gt;\n        release_this_conn = release_conn\n    \n        http_tunnel_required = connection_requires_http_tunnel(\n            self.proxy, self.proxy_config, destination_scheme\n        )\n    \n        # Merge the proxy headers. Only done when not using HTTP CONNECT. We\n        # have to copy the headers dict so we can safely change it without those\n        # changes being reflected in anyone else&amp;#x27;s copy.\n        if not http_tunnel_required:\n            headers = headers.copy()\n            headers.update(self.proxy_headers)\n    \n        # Must keep the exception bound to a separate variable or else Python 3\n        # complains about UnboundLocalError.\n        err = None\n    \n        # Keep track of whether we cleanly exited the except block. This\n        # ensures we do proper cleanup in finally.\n        clean_exit = False\n    \n        # Rewind body position, if needed. Record current position\n        # for future rewinds in the event of a redirect/retry.\n        body_pos = set_file_position(body, body_pos)\n    \n        try:\n            # Request a connection from the queue.\n            timeout_obj = self._get_timeout(timeout)\n            conn = self._get_conn(timeout=pool_timeout)\n    \n            conn.timeout = timeout_obj.connect_timeout\n    \n            is_new_proxy_conn = self.proxy is not None and not getattr(\n                conn, &amp;quot;sock&amp;quot;, None\n            )\n            if is_new_proxy_conn and http_tunnel_required:\n                self._prepare_proxy(conn)\n    \n            # Make the request on the httplib connection object.\n&amp;gt;           httplib_response = self._make_request(\n                conn,\n                method,\n                url,\n                timeout=timeout_obj,\n                body=body,\n                headers=headers,\n                chunked=chunked,\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:703: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:398: in _make_request\n    conn.request(method, url, **httplib_request_kw)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:239: in request\n    super(HTTPConnection, self).request(method, url, body=body, headers=headers)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1282: in request\n    self._send_request(method, url, body, headers, encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1328: in _send_request\n    self.endheaders(body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1277: in endheaders\n    self._send_output(message_body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1037: in _send_output\n    self.send(msg)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:975: in send\n    self.connect()\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:205: in connect\n    conn = self._new_conn()\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927B3B5D0&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n            conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n    \n        except SocketTimeout:\n            raise ConnectTimeoutError(\n                self,\n                &amp;quot;Connection to %s timed out. (connect timeout=%s)&amp;quot;\n                % (self.host, self.timeout),\n            )\n    \n        except SocketError as e:\n&amp;gt;           raise NewConnectionError(\n                self, &amp;quot;Failed to establish a new connection: %s&amp;quot; % e\n            )\nE           urllib3.exceptions.NewConnectionError: &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927B3B5D0&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:186: NewConnectionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927B3BE10&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n&amp;gt;               resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:489: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:787: in urlopen\n    retries = retries.increment(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = Retry(total=0, connect=None, read=False, redirect=None, status=None), method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, response = None\nerror = NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927B3B5D0&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;)\n_pool = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927B38090&amp;gt;, _stacktrace = &amp;lt;traceback object at 0x0000023927CE0080&amp;gt;\n\n    def increment(\n        self,\n        method=None,\n        url=None,\n        response=None,\n        error=None,\n        _pool=None,\n        _stacktrace=None,\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Return a new Retry object with incremented retry counters.\n    \n        :param response: A response object, or None, if the server did not\n            return a response.\n        :type response: :class:`~urllib3.response.HTTPResponse`\n        :param Exception error: An error encountered during the request, or\n            None if the response was received successfully.\n    \n        :return: A new ``Retry`` object.\n        &amp;quot;&amp;quot;&amp;quot;\n        if self.total is False and error:\n            # Disabled, indicate to re-raise the error.\n            raise six.reraise(type(error), error, _stacktrace)\n    \n        total = self.total\n        if total is not None:\n            total -= 1\n    \n        connect = self.connect\n        read = self.read\n        redirect = self.redirect\n        status_count = self.status\n        other = self.other\n        cause = &amp;quot;unknown&amp;quot;\n        status = None\n        redirect_location = None\n    \n        if error and self._is_connection_error(error):\n            # Connect retry?\n            if connect is False:\n                raise six.reraise(type(error), error, _stacktrace)\n            elif connect is not None:\n                connect -= 1\n    \n        elif error and self._is_read_error(error):\n            # Read retry?\n            if read is False or not self._is_method_retryable(method):\n                raise six.reraise(type(error), error, _stacktrace)\n            elif read is not None:\n                read -= 1\n    \n        elif error:\n            # Other retry?\n            if other is not None:\n                other -= 1\n    \n        elif response and response.get_redirect_location():\n            # Redirect retry?\n            if redirect is not None:\n                redirect -= 1\n            cause = &amp;quot;too many redirects&amp;quot;\n            redirect_location = response.get_redirect_location()\n            status = response.status\n    \n        else:\n            # Incrementing because of a server error like a 500 in\n            # status_forcelist and the given method is in the allowed_methods\n            cause = ResponseError.GENERIC_ERROR\n            if response and response.status:\n                if status_count is not None:\n                    status_count -= 1\n                cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status)\n                status = response.status\n    \n        history = self.history + (\n            RequestHistory(method, url, error, status, redirect_location),\n        )\n    \n        new_retry = self.new(\n            total=total,\n            connect=connect,\n            read=read,\n            redirect=redirect,\n            status=status_count,\n            other=other,\n            history=history,\n        )\n    \n        if new_retry.is_exhausted():\n&amp;gt;           raise MaxRetryError(_pool, url, error or ResponseError(cause))\nE           urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927B3B5D0&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\retry.py:592: MaxRetryError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;scripts.test_ihrm_login.TestIhrmLogin object at 0x0000023927298DD0&amp;gt;\n\n    def test07_12_mobile(self):\n        data = {&amp;quot;mobile&amp;quot;: &amp;quot;138000000034&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;123456&amp;quot;}\n&amp;gt;       resp = IhrmLoginApi.login(data)\n\nscripts\\test_ihrm_login.py:89: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\napi\\ihrm_login_api.py:12: in login\n    resp = requests.post(url=&amp;quot;http://ihrm-test.itheima.net/api/sys/login&amp;quot;, json=req_data)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:115: in post\n    return request(&amp;quot;post&amp;quot;, url, data=data, json=json, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:59: in request\n    return session.request(method=method, url=url, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:587: in request\n    resp = self.send(prep, **send_kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:701: in send\n    r = adapter.send(request, **kwargs)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927B3BE10&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n                resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n    \n            # Send the request.\n            else:\n                if hasattr(conn, &amp;quot;proxy_pool&amp;quot;):\n                    conn = conn.proxy_pool\n    \n                low_conn = conn._get_conn(timeout=DEFAULT_POOL_TIMEOUT)\n    \n                try:\n                    skip_host = &amp;quot;Host&amp;quot; in request.headers\n                    low_conn.putrequest(\n                        request.method,\n                        url,\n                        skip_accept_encoding=True,\n                        skip_host=skip_host,\n                    )\n    \n                    for header, value in request.headers.items():\n                        low_conn.putheader(header, value)\n    \n                    low_conn.endheaders()\n    \n                    for i in request.body:\n                        low_conn.send(hex(len(i))[2:].encode(&amp;quot;utf-8&amp;quot;))\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                        low_conn.send(i)\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                    low_conn.send(b&amp;quot;0\\r\\n\\r\\n&amp;quot;)\n    \n                    # Receive the response from the server\n                    r = low_conn.getresponse()\n    \n                    resp = HTTPResponse.from_httplib(\n                        r,\n                        pool=conn,\n                        connection=low_conn,\n                        preload_content=False,\n                        decode_content=False,\n                    )\n                except Exception:\n                    # If we hit any problems here, clean up the connection.\n                    # Then, raise so that we can handle the actual exception.\n                    low_conn.close()\n                    raise\n    \n        except (ProtocolError, OSError) as err:\n            raise ConnectionError(err, request=request)\n    \n        except MaxRetryError as e:\n            if isinstance(e.reason, ConnectTimeoutError):\n                # TODO: Remove this in 3.0.0: see #2811\n                if not isinstance(e.reason, NewConnectionError):\n                    raise ConnectTimeout(e, request=request)\n    \n            if isinstance(e.reason, ResponseError):\n                raise RetryError(e, request=request)\n    \n            if isinstance(e.reason, _ProxyError):\n                raise ProxyError(e, request=request)\n    \n            if isinstance(e.reason, _SSLError):\n                # This branch is for urllib3 v1.22 and later.\n                raise SSLError(e, request=request)\n    \n&amp;gt;           raise ConnectionError(e, request=request)\nE           requests.exceptions.ConnectionError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927B3B5D0&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:565: ConnectionError\n\n------------------------------ Captured log call -------------------------------\nDEBUG    urllib3.connectionpool:connectionpool.py:228 Starting new HTTP connection (1): ihrm-test.itheima.net:80\n\n&#34;}], &#34;scripts/test_ihrm_login.py::TestIhrmLogin::test08_pwd_none&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Failed&#34;, &#34;testId&#34;: &#34;scripts/test_ihrm_login.py::TestIhrmLogin::test08_pwd_none&#34;, &#34;duration&#34;: &#34;43 ms&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Failed&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;scripts/test_ihrm_login.py::TestIhrmLogin::test08_pwd_none&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;43 ms&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;self = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927C22150&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n&amp;gt;           conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:174: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\connection.py:72: in create_connection\n    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nhost = &amp;#x27;ihrm-test.itheima.net&amp;#x27;, port = 80, family = &amp;lt;AddressFamily.AF_UNSPEC: 0&amp;gt;, type = &amp;lt;SocketKind.SOCK_STREAM: 1&amp;gt;, proto = 0, flags = 0\n\n    def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):\n        &amp;quot;&amp;quot;&amp;quot;Resolve host and port into list of address info entries.\n    \n        Translate the host/port argument into a sequence of 5-tuples that contain\n        all the necessary arguments for creating a socket connected to that service.\n        host is a domain name, a string representation of an IPv4/v6 address or\n        None. port is a string service name such as &amp;#x27;http&amp;#x27;, a numeric port number or\n        None. By passing None as the value of host and port, you can pass NULL to\n        the underlying C API.\n    \n        The family, type and proto arguments can be optionally specified in order to\n        narrow the list of addresses returned. Passing zero as a value for each of\n        these arguments selects the full range of results.\n        &amp;quot;&amp;quot;&amp;quot;\n        # We override this function since we want to translate the numeric family\n        # and socket type values to enum constants.\n        addrlist = []\n&amp;gt;       for res in _socket.getaddrinfo(host, port, family, type, proto, flags):\nE       socket.gaierror: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\socket.py:962: gaierror\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927C20F50&amp;gt;, method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, body = b&amp;#x27;{&amp;quot;mobile&amp;quot;: &amp;quot;13800000002&amp;quot;, &amp;quot;password&amp;quot;: null}&amp;#x27;\nheaders = {&amp;#x27;User-Agent&amp;#x27;: &amp;#x27;python-requests/2.28.1&amp;#x27;, &amp;#x27;Accept-Encoding&amp;#x27;: &amp;#x27;gzip, deflate&amp;#x27;, &amp;#x27;Accept&amp;#x27;: &amp;#x27;*/*&amp;#x27;, &amp;#x27;Connection&amp;#x27;: &amp;#x27;keep-alive&amp;#x27;, &amp;#x27;Content-Length&amp;#x27;: &amp;#x27;43&amp;#x27;, &amp;#x27;Content-Type&amp;#x27;: &amp;#x27;application/json&amp;#x27;}\nretries = Retry(total=0, connect=None, read=False, redirect=None, status=None), redirect = False, assert_same_host = False, timeout = Timeout(connect=None, read=None, total=None)\npool_timeout = None, release_conn = False, chunked = False, body_pos = None, response_kw = {&amp;#x27;decode_content&amp;#x27;: False, &amp;#x27;preload_content&amp;#x27;: False}\nparsed_url = Url(scheme=None, auth=None, host=None, port=None, path=&amp;#x27;/api/sys/login&amp;#x27;, query=None, fragment=None), destination_scheme = None, conn = None, release_this_conn = True\nhttp_tunnel_required = False, err = None, clean_exit = False\n\n    def urlopen(\n        self,\n        method,\n        url,\n        body=None,\n        headers=None,\n        retries=None,\n        redirect=True,\n        assert_same_host=True,\n        timeout=_Default,\n        pool_timeout=None,\n        release_conn=None,\n        chunked=False,\n        body_pos=None,\n        **response_kw\n    ):\n        &amp;quot;&amp;quot;&amp;quot;\n        Get a connection from the pool and perform an HTTP request. This is the\n        lowest level call for making a request, so you&amp;#x27;ll need to specify all\n        the raw details.\n    \n        .. note::\n    \n           More commonly, it&amp;#x27;s appropriate to use a convenience method provided\n           by :class:`.RequestMethods`, such as :meth:`request`.\n    \n        .. note::\n    \n           `release_conn` will only behave as expected if\n           `preload_content=False` because we want to make\n           `preload_content=False` the default behaviour someday soon without\n           breaking backwards compatibility.\n    \n        :param method:\n            HTTP request method (such as GET, POST, PUT, etc.)\n    \n        :param url:\n            The URL to perform the request on.\n    \n        :param body:\n            Data to send in the request body, either :class:`str`, :class:`bytes`,\n            an iterable of :class:`str`/:class:`bytes`, or a file-like object.\n    \n        :param headers:\n            Dictionary of custom headers to send, such as User-Agent,\n            If-None-Match, etc. If None, pool headers are used. If provided,\n            these headers completely replace any pool-specific headers.\n    \n        :param retries:\n            Configure the number of retries to allow before raising a\n            :class:`~urllib3.exceptions.MaxRetryError` exception.\n    \n            Pass ``None`` to retry until you receive a response. Pass a\n            :class:`~urllib3.util.retry.Retry` object for fine-grained control\n            over different types of retries.\n            Pass an integer number to retry connection errors that many times,\n            but no other types of errors. Pass zero to never retry.\n    \n            If ``False``, then retries are disabled and any exception is raised\n            immediately. Also, instead of raising a MaxRetryError on redirects,\n            the redirect response will be returned.\n    \n        :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.\n    \n        :param redirect:\n            If True, automatically handle redirects (status codes 301, 302,\n            303, 307, 308). Each redirect counts as a retry. Disabling retries\n            will disable redirect, too.\n    \n        :param assert_same_host:\n            If ``True``, will make sure that the host of the pool requests is\n            consistent else will raise HostChangedError. When ``False``, you can\n            use the pool on an HTTP proxy and request foreign hosts.\n    \n        :param timeout:\n            If specified, overrides the default timeout for this one\n            request. It may be a float (in seconds) or an instance of\n            :class:`urllib3.util.Timeout`.\n    \n        :param pool_timeout:\n            If set and the pool is set to block=True, then this method will\n            block for ``pool_timeout`` seconds and raise EmptyPoolError if no\n            connection is available within the time period.\n    \n        :param release_conn:\n            If False, then the urlopen call will not release the connection\n            back into the pool once a response is received (but will release if\n            you read the entire contents of the response such as when\n            `preload_content=True`). This is useful if you&amp;#x27;re not preloading\n            the response&amp;#x27;s content immediately. You will need to call\n            ``r.release_conn()`` on the response ``r`` to return the connection\n            back into the pool. If None, it takes the value of\n            ``response_kw.get(&amp;#x27;preload_content&amp;#x27;, True)``.\n    \n        :param chunked:\n            If True, urllib3 will send the body using chunked transfer\n            encoding. Otherwise, urllib3 will send the body using the standard\n            content-length form. Defaults to False.\n    \n        :param int body_pos:\n            Position to seek to in file-like body in the event of a retry or\n            redirect. Typically this won&amp;#x27;t need to be set because urllib3 will\n            auto-populate the value when needed.\n    \n        :param \\\\**response_kw:\n            Additional parameters are passed to\n            :meth:`urllib3.response.HTTPResponse.from_httplib`\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        parsed_url = parse_url(url)\n        destination_scheme = parsed_url.scheme\n    \n        if headers is None:\n            headers = self.headers\n    \n        if not isinstance(retries, Retry):\n            retries = Retry.from_int(retries, redirect=redirect, default=self.retries)\n    \n        if release_conn is None:\n            release_conn = response_kw.get(&amp;quot;preload_content&amp;quot;, True)\n    \n        # Check host\n        if assert_same_host and not self.is_same_host(url):\n            raise HostChangedError(self, url, retries)\n    \n        # Ensure that the URL we&amp;#x27;re connecting to is properly encoded\n        if url.startswith(&amp;quot;/&amp;quot;):\n            url = six.ensure_str(_encode_target(url))\n        else:\n            url = six.ensure_str(parsed_url.url)\n    \n        conn = None\n    \n        # Track whether `conn` needs to be released before\n        # returning/raising/recursing. Update this variable if necessary, and\n        # leave `release_conn` constant throughout the function. That way, if\n        # the function recurses, the original value of `release_conn` will be\n        # passed down into the recursive call, and its value will be respected.\n        #\n        # See issue #651 [1] for details.\n        #\n        # [1] &amp;lt;https://github.com/urllib3/urllib3/issues/651&amp;gt;\n        release_this_conn = release_conn\n    \n        http_tunnel_required = connection_requires_http_tunnel(\n            self.proxy, self.proxy_config, destination_scheme\n        )\n    \n        # Merge the proxy headers. Only done when not using HTTP CONNECT. We\n        # have to copy the headers dict so we can safely change it without those\n        # changes being reflected in anyone else&amp;#x27;s copy.\n        if not http_tunnel_required:\n            headers = headers.copy()\n            headers.update(self.proxy_headers)\n    \n        # Must keep the exception bound to a separate variable or else Python 3\n        # complains about UnboundLocalError.\n        err = None\n    \n        # Keep track of whether we cleanly exited the except block. This\n        # ensures we do proper cleanup in finally.\n        clean_exit = False\n    \n        # Rewind body position, if needed. Record current position\n        # for future rewinds in the event of a redirect/retry.\n        body_pos = set_file_position(body, body_pos)\n    \n        try:\n            # Request a connection from the queue.\n            timeout_obj = self._get_timeout(timeout)\n            conn = self._get_conn(timeout=pool_timeout)\n    \n            conn.timeout = timeout_obj.connect_timeout\n    \n            is_new_proxy_conn = self.proxy is not None and not getattr(\n                conn, &amp;quot;sock&amp;quot;, None\n            )\n            if is_new_proxy_conn and http_tunnel_required:\n                self._prepare_proxy(conn)\n    \n            # Make the request on the httplib connection object.\n&amp;gt;           httplib_response = self._make_request(\n                conn,\n                method,\n                url,\n                timeout=timeout_obj,\n                body=body,\n                headers=headers,\n                chunked=chunked,\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:703: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:398: in _make_request\n    conn.request(method, url, **httplib_request_kw)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:239: in request\n    super(HTTPConnection, self).request(method, url, body=body, headers=headers)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1282: in request\n    self._send_request(method, url, body, headers, encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1328: in _send_request\n    self.endheaders(body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1277: in endheaders\n    self._send_output(message_body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1037: in _send_output\n    self.send(msg)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:975: in send\n    self.connect()\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:205: in connect\n    conn = self._new_conn()\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927C22150&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n            conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n    \n        except SocketTimeout:\n            raise ConnectTimeoutError(\n                self,\n                &amp;quot;Connection to %s timed out. (connect timeout=%s)&amp;quot;\n                % (self.host, self.timeout),\n            )\n    \n        except SocketError as e:\n&amp;gt;           raise NewConnectionError(\n                self, &amp;quot;Failed to establish a new connection: %s&amp;quot; % e\n            )\nE           urllib3.exceptions.NewConnectionError: &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927C22150&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:186: NewConnectionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927C21550&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n&amp;gt;               resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:489: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:787: in urlopen\n    retries = retries.increment(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = Retry(total=0, connect=None, read=False, redirect=None, status=None), method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, response = None\nerror = NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927C22150&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;)\n_pool = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927C20F50&amp;gt;, _stacktrace = &amp;lt;traceback object at 0x0000023927C22F80&amp;gt;\n\n    def increment(\n        self,\n        method=None,\n        url=None,\n        response=None,\n        error=None,\n        _pool=None,\n        _stacktrace=None,\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Return a new Retry object with incremented retry counters.\n    \n        :param response: A response object, or None, if the server did not\n            return a response.\n        :type response: :class:`~urllib3.response.HTTPResponse`\n        :param Exception error: An error encountered during the request, or\n            None if the response was received successfully.\n    \n        :return: A new ``Retry`` object.\n        &amp;quot;&amp;quot;&amp;quot;\n        if self.total is False and error:\n            # Disabled, indicate to re-raise the error.\n            raise six.reraise(type(error), error, _stacktrace)\n    \n        total = self.total\n        if total is not None:\n            total -= 1\n    \n        connect = self.connect\n        read = self.read\n        redirect = self.redirect\n        status_count = self.status\n        other = self.other\n        cause = &amp;quot;unknown&amp;quot;\n        status = None\n        redirect_location = None\n    \n        if error and self._is_connection_error(error):\n            # Connect retry?\n            if connect is False:\n                raise six.reraise(type(error), error, _stacktrace)\n            elif connect is not None:\n                connect -= 1\n    \n        elif error and self._is_read_error(error):\n            # Read retry?\n            if read is False or not self._is_method_retryable(method):\n                raise six.reraise(type(error), error, _stacktrace)\n            elif read is not None:\n                read -= 1\n    \n        elif error:\n            # Other retry?\n            if other is not None:\n                other -= 1\n    \n        elif response and response.get_redirect_location():\n            # Redirect retry?\n            if redirect is not None:\n                redirect -= 1\n            cause = &amp;quot;too many redirects&amp;quot;\n            redirect_location = response.get_redirect_location()\n            status = response.status\n    \n        else:\n            # Incrementing because of a server error like a 500 in\n            # status_forcelist and the given method is in the allowed_methods\n            cause = ResponseError.GENERIC_ERROR\n            if response and response.status:\n                if status_count is not None:\n                    status_count -= 1\n                cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status)\n                status = response.status\n    \n        history = self.history + (\n            RequestHistory(method, url, error, status, redirect_location),\n        )\n    \n        new_retry = self.new(\n            total=total,\n            connect=connect,\n            read=read,\n            redirect=redirect,\n            status=status_count,\n            other=other,\n            history=history,\n        )\n    \n        if new_retry.is_exhausted():\n&amp;gt;           raise MaxRetryError(_pool, url, error or ResponseError(cause))\nE           urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927C22150&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\retry.py:592: MaxRetryError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;scripts.test_ihrm_login.TestIhrmLogin object at 0x0000023927298C50&amp;gt;\n\n    def test08_pwd_none(self):\n        data = {&amp;quot;mobile&amp;quot;: &amp;quot;13800000002&amp;quot;, &amp;quot;password&amp;quot;: None}\n&amp;gt;       resp = IhrmLoginApi.login(data)\n\nscripts\\test_ihrm_login.py:95: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\napi\\ihrm_login_api.py:12: in login\n    resp = requests.post(url=&amp;quot;http://ihrm-test.itheima.net/api/sys/login&amp;quot;, json=req_data)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:115: in post\n    return request(&amp;quot;post&amp;quot;, url, data=data, json=json, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:59: in request\n    return session.request(method=method, url=url, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:587: in request\n    resp = self.send(prep, **send_kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:701: in send\n    r = adapter.send(request, **kwargs)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927C21550&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n                resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n    \n            # Send the request.\n            else:\n                if hasattr(conn, &amp;quot;proxy_pool&amp;quot;):\n                    conn = conn.proxy_pool\n    \n                low_conn = conn._get_conn(timeout=DEFAULT_POOL_TIMEOUT)\n    \n                try:\n                    skip_host = &amp;quot;Host&amp;quot; in request.headers\n                    low_conn.putrequest(\n                        request.method,\n                        url,\n                        skip_accept_encoding=True,\n                        skip_host=skip_host,\n                    )\n    \n                    for header, value in request.headers.items():\n                        low_conn.putheader(header, value)\n    \n                    low_conn.endheaders()\n    \n                    for i in request.body:\n                        low_conn.send(hex(len(i))[2:].encode(&amp;quot;utf-8&amp;quot;))\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                        low_conn.send(i)\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                    low_conn.send(b&amp;quot;0\\r\\n\\r\\n&amp;quot;)\n    \n                    # Receive the response from the server\n                    r = low_conn.getresponse()\n    \n                    resp = HTTPResponse.from_httplib(\n                        r,\n                        pool=conn,\n                        connection=low_conn,\n                        preload_content=False,\n                        decode_content=False,\n                    )\n                except Exception:\n                    # If we hit any problems here, clean up the connection.\n                    # Then, raise so that we can handle the actual exception.\n                    low_conn.close()\n                    raise\n    \n        except (ProtocolError, OSError) as err:\n            raise ConnectionError(err, request=request)\n    \n        except MaxRetryError as e:\n            if isinstance(e.reason, ConnectTimeoutError):\n                # TODO: Remove this in 3.0.0: see #2811\n                if not isinstance(e.reason, NewConnectionError):\n                    raise ConnectTimeout(e, request=request)\n    \n            if isinstance(e.reason, ResponseError):\n                raise RetryError(e, request=request)\n    \n            if isinstance(e.reason, _ProxyError):\n                raise ProxyError(e, request=request)\n    \n            if isinstance(e.reason, _SSLError):\n                # This branch is for urllib3 v1.22 and later.\n                raise SSLError(e, request=request)\n    \n&amp;gt;           raise ConnectionError(e, request=request)\nE           requests.exceptions.ConnectionError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927C22150&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:565: ConnectionError\n\n------------------------------ Captured log call -------------------------------\nDEBUG    urllib3.connectionpool:connectionpool.py:228 Starting new HTTP connection (1): ihrm-test.itheima.net:80\n\n&#34;}], &#34;scripts/test_ihrm_login.py::TestIhrmLogin::test09_pwd_have_special_char&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Failed&#34;, &#34;testId&#34;: &#34;scripts/test_ihrm_login.py::TestIhrmLogin::test09_pwd_have_special_char&#34;, &#34;duration&#34;: &#34;35 ms&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Failed&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;scripts/test_ihrm_login.py::TestIhrmLogin::test09_pwd_have_special_char&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;35 ms&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;self = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927A1E790&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n&amp;gt;           conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:174: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\connection.py:72: in create_connection\n    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nhost = &amp;#x27;ihrm-test.itheima.net&amp;#x27;, port = 80, family = &amp;lt;AddressFamily.AF_UNSPEC: 0&amp;gt;, type = &amp;lt;SocketKind.SOCK_STREAM: 1&amp;gt;, proto = 0, flags = 0\n\n    def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):\n        &amp;quot;&amp;quot;&amp;quot;Resolve host and port into list of address info entries.\n    \n        Translate the host/port argument into a sequence of 5-tuples that contain\n        all the necessary arguments for creating a socket connected to that service.\n        host is a domain name, a string representation of an IPv4/v6 address or\n        None. port is a string service name such as &amp;#x27;http&amp;#x27;, a numeric port number or\n        None. By passing None as the value of host and port, you can pass NULL to\n        the underlying C API.\n    \n        The family, type and proto arguments can be optionally specified in order to\n        narrow the list of addresses returned. Passing zero as a value for each of\n        these arguments selects the full range of results.\n        &amp;quot;&amp;quot;&amp;quot;\n        # We override this function since we want to translate the numeric family\n        # and socket type values to enum constants.\n        addrlist = []\n&amp;gt;       for res in _socket.getaddrinfo(host, port, family, type, proto, flags):\nE       socket.gaierror: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\socket.py:962: gaierror\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927A1C290&amp;gt;, method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;\nbody = b&amp;#x27;{&amp;quot;mobile&amp;quot;: &amp;quot;13800000002&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;abc#\\\\uffe5%&amp;quot;}&amp;#x27;\nheaders = {&amp;#x27;User-Agent&amp;#x27;: &amp;#x27;python-requests/2.28.1&amp;#x27;, &amp;#x27;Accept-Encoding&amp;#x27;: &amp;#x27;gzip, deflate&amp;#x27;, &amp;#x27;Accept&amp;#x27;: &amp;#x27;*/*&amp;#x27;, &amp;#x27;Connection&amp;#x27;: &amp;#x27;keep-alive&amp;#x27;, &amp;#x27;Content-Length&amp;#x27;: &amp;#x27;52&amp;#x27;, &amp;#x27;Content-Type&amp;#x27;: &amp;#x27;application/json&amp;#x27;}\nretries = Retry(total=0, connect=None, read=False, redirect=None, status=None), redirect = False, assert_same_host = False, timeout = Timeout(connect=None, read=None, total=None)\npool_timeout = None, release_conn = False, chunked = False, body_pos = None, response_kw = {&amp;#x27;decode_content&amp;#x27;: False, &amp;#x27;preload_content&amp;#x27;: False}\nparsed_url = Url(scheme=None, auth=None, host=None, port=None, path=&amp;#x27;/api/sys/login&amp;#x27;, query=None, fragment=None), destination_scheme = None, conn = None, release_this_conn = True\nhttp_tunnel_required = False, err = None, clean_exit = False\n\n    def urlopen(\n        self,\n        method,\n        url,\n        body=None,\n        headers=None,\n        retries=None,\n        redirect=True,\n        assert_same_host=True,\n        timeout=_Default,\n        pool_timeout=None,\n        release_conn=None,\n        chunked=False,\n        body_pos=None,\n        **response_kw\n    ):\n        &amp;quot;&amp;quot;&amp;quot;\n        Get a connection from the pool and perform an HTTP request. This is the\n        lowest level call for making a request, so you&amp;#x27;ll need to specify all\n        the raw details.\n    \n        .. note::\n    \n           More commonly, it&amp;#x27;s appropriate to use a convenience method provided\n           by :class:`.RequestMethods`, such as :meth:`request`.\n    \n        .. note::\n    \n           `release_conn` will only behave as expected if\n           `preload_content=False` because we want to make\n           `preload_content=False` the default behaviour someday soon without\n           breaking backwards compatibility.\n    \n        :param method:\n            HTTP request method (such as GET, POST, PUT, etc.)\n    \n        :param url:\n            The URL to perform the request on.\n    \n        :param body:\n            Data to send in the request body, either :class:`str`, :class:`bytes`,\n            an iterable of :class:`str`/:class:`bytes`, or a file-like object.\n    \n        :param headers:\n            Dictionary of custom headers to send, such as User-Agent,\n            If-None-Match, etc. If None, pool headers are used. If provided,\n            these headers completely replace any pool-specific headers.\n    \n        :param retries:\n            Configure the number of retries to allow before raising a\n            :class:`~urllib3.exceptions.MaxRetryError` exception.\n    \n            Pass ``None`` to retry until you receive a response. Pass a\n            :class:`~urllib3.util.retry.Retry` object for fine-grained control\n            over different types of retries.\n            Pass an integer number to retry connection errors that many times,\n            but no other types of errors. Pass zero to never retry.\n    \n            If ``False``, then retries are disabled and any exception is raised\n            immediately. Also, instead of raising a MaxRetryError on redirects,\n            the redirect response will be returned.\n    \n        :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.\n    \n        :param redirect:\n            If True, automatically handle redirects (status codes 301, 302,\n            303, 307, 308). Each redirect counts as a retry. Disabling retries\n            will disable redirect, too.\n    \n        :param assert_same_host:\n            If ``True``, will make sure that the host of the pool requests is\n            consistent else will raise HostChangedError. When ``False``, you can\n            use the pool on an HTTP proxy and request foreign hosts.\n    \n        :param timeout:\n            If specified, overrides the default timeout for this one\n            request. It may be a float (in seconds) or an instance of\n            :class:`urllib3.util.Timeout`.\n    \n        :param pool_timeout:\n            If set and the pool is set to block=True, then this method will\n            block for ``pool_timeout`` seconds and raise EmptyPoolError if no\n            connection is available within the time period.\n    \n        :param release_conn:\n            If False, then the urlopen call will not release the connection\n            back into the pool once a response is received (but will release if\n            you read the entire contents of the response such as when\n            `preload_content=True`). This is useful if you&amp;#x27;re not preloading\n            the response&amp;#x27;s content immediately. You will need to call\n            ``r.release_conn()`` on the response ``r`` to return the connection\n            back into the pool. If None, it takes the value of\n            ``response_kw.get(&amp;#x27;preload_content&amp;#x27;, True)``.\n    \n        :param chunked:\n            If True, urllib3 will send the body using chunked transfer\n            encoding. Otherwise, urllib3 will send the body using the standard\n            content-length form. Defaults to False.\n    \n        :param int body_pos:\n            Position to seek to in file-like body in the event of a retry or\n            redirect. Typically this won&amp;#x27;t need to be set because urllib3 will\n            auto-populate the value when needed.\n    \n        :param \\\\**response_kw:\n            Additional parameters are passed to\n            :meth:`urllib3.response.HTTPResponse.from_httplib`\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        parsed_url = parse_url(url)\n        destination_scheme = parsed_url.scheme\n    \n        if headers is None:\n            headers = self.headers\n    \n        if not isinstance(retries, Retry):\n            retries = Retry.from_int(retries, redirect=redirect, default=self.retries)\n    \n        if release_conn is None:\n            release_conn = response_kw.get(&amp;quot;preload_content&amp;quot;, True)\n    \n        # Check host\n        if assert_same_host and not self.is_same_host(url):\n            raise HostChangedError(self, url, retries)\n    \n        # Ensure that the URL we&amp;#x27;re connecting to is properly encoded\n        if url.startswith(&amp;quot;/&amp;quot;):\n            url = six.ensure_str(_encode_target(url))\n        else:\n            url = six.ensure_str(parsed_url.url)\n    \n        conn = None\n    \n        # Track whether `conn` needs to be released before\n        # returning/raising/recursing. Update this variable if necessary, and\n        # leave `release_conn` constant throughout the function. That way, if\n        # the function recurses, the original value of `release_conn` will be\n        # passed down into the recursive call, and its value will be respected.\n        #\n        # See issue #651 [1] for details.\n        #\n        # [1] &amp;lt;https://github.com/urllib3/urllib3/issues/651&amp;gt;\n        release_this_conn = release_conn\n    \n        http_tunnel_required = connection_requires_http_tunnel(\n            self.proxy, self.proxy_config, destination_scheme\n        )\n    \n        # Merge the proxy headers. Only done when not using HTTP CONNECT. We\n        # have to copy the headers dict so we can safely change it without those\n        # changes being reflected in anyone else&amp;#x27;s copy.\n        if not http_tunnel_required:\n            headers = headers.copy()\n            headers.update(self.proxy_headers)\n    \n        # Must keep the exception bound to a separate variable or else Python 3\n        # complains about UnboundLocalError.\n        err = None\n    \n        # Keep track of whether we cleanly exited the except block. This\n        # ensures we do proper cleanup in finally.\n        clean_exit = False\n    \n        # Rewind body position, if needed. Record current position\n        # for future rewinds in the event of a redirect/retry.\n        body_pos = set_file_position(body, body_pos)\n    \n        try:\n            # Request a connection from the queue.\n            timeout_obj = self._get_timeout(timeout)\n            conn = self._get_conn(timeout=pool_timeout)\n    \n            conn.timeout = timeout_obj.connect_timeout\n    \n            is_new_proxy_conn = self.proxy is not None and not getattr(\n                conn, &amp;quot;sock&amp;quot;, None\n            )\n            if is_new_proxy_conn and http_tunnel_required:\n                self._prepare_proxy(conn)\n    \n            # Make the request on the httplib connection object.\n&amp;gt;           httplib_response = self._make_request(\n                conn,\n                method,\n                url,\n                timeout=timeout_obj,\n                body=body,\n                headers=headers,\n                chunked=chunked,\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:703: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:398: in _make_request\n    conn.request(method, url, **httplib_request_kw)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:239: in request\n    super(HTTPConnection, self).request(method, url, body=body, headers=headers)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1282: in request\n    self._send_request(method, url, body, headers, encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1328: in _send_request\n    self.endheaders(body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1277: in endheaders\n    self._send_output(message_body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1037: in _send_output\n    self.send(msg)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:975: in send\n    self.connect()\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:205: in connect\n    conn = self._new_conn()\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927A1E790&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n            conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n    \n        except SocketTimeout:\n            raise ConnectTimeoutError(\n                self,\n                &amp;quot;Connection to %s timed out. (connect timeout=%s)&amp;quot;\n                % (self.host, self.timeout),\n            )\n    \n        except SocketError as e:\n&amp;gt;           raise NewConnectionError(\n                self, &amp;quot;Failed to establish a new connection: %s&amp;quot; % e\n            )\nE           urllib3.exceptions.NewConnectionError: &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927A1E790&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:186: NewConnectionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927A1CE10&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n&amp;gt;               resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:489: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:787: in urlopen\n    retries = retries.increment(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = Retry(total=0, connect=None, read=False, redirect=None, status=None), method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, response = None\nerror = NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927A1E790&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;)\n_pool = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927A1C290&amp;gt;, _stacktrace = &amp;lt;traceback object at 0x0000023927BF4F00&amp;gt;\n\n    def increment(\n        self,\n        method=None,\n        url=None,\n        response=None,\n        error=None,\n        _pool=None,\n        _stacktrace=None,\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Return a new Retry object with incremented retry counters.\n    \n        :param response: A response object, or None, if the server did not\n            return a response.\n        :type response: :class:`~urllib3.response.HTTPResponse`\n        :param Exception error: An error encountered during the request, or\n            None if the response was received successfully.\n    \n        :return: A new ``Retry`` object.\n        &amp;quot;&amp;quot;&amp;quot;\n        if self.total is False and error:\n            # Disabled, indicate to re-raise the error.\n            raise six.reraise(type(error), error, _stacktrace)\n    \n        total = self.total\n        if total is not None:\n            total -= 1\n    \n        connect = self.connect\n        read = self.read\n        redirect = self.redirect\n        status_count = self.status\n        other = self.other\n        cause = &amp;quot;unknown&amp;quot;\n        status = None\n        redirect_location = None\n    \n        if error and self._is_connection_error(error):\n            # Connect retry?\n            if connect is False:\n                raise six.reraise(type(error), error, _stacktrace)\n            elif connect is not None:\n                connect -= 1\n    \n        elif error and self._is_read_error(error):\n            # Read retry?\n            if read is False or not self._is_method_retryable(method):\n                raise six.reraise(type(error), error, _stacktrace)\n            elif read is not None:\n                read -= 1\n    \n        elif error:\n            # Other retry?\n            if other is not None:\n                other -= 1\n    \n        elif response and response.get_redirect_location():\n            # Redirect retry?\n            if redirect is not None:\n                redirect -= 1\n            cause = &amp;quot;too many redirects&amp;quot;\n            redirect_location = response.get_redirect_location()\n            status = response.status\n    \n        else:\n            # Incrementing because of a server error like a 500 in\n            # status_forcelist and the given method is in the allowed_methods\n            cause = ResponseError.GENERIC_ERROR\n            if response and response.status:\n                if status_count is not None:\n                    status_count -= 1\n                cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status)\n                status = response.status\n    \n        history = self.history + (\n            RequestHistory(method, url, error, status, redirect_location),\n        )\n    \n        new_retry = self.new(\n            total=total,\n            connect=connect,\n            read=read,\n            redirect=redirect,\n            status=status_count,\n            other=other,\n            history=history,\n        )\n    \n        if new_retry.is_exhausted():\n&amp;gt;           raise MaxRetryError(_pool, url, error or ResponseError(cause))\nE           urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927A1E790&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\retry.py:592: MaxRetryError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;scripts.test_ihrm_login.TestIhrmLogin object at 0x0000023927299310&amp;gt;\n\n    def test09_pwd_have_special_char(self):\n        data = {&amp;quot;mobile&amp;quot;: &amp;quot;13800000002&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;abc#\uffe5%&amp;quot;}\n&amp;gt;       resp = IhrmLoginApi.login(data)\n\nscripts\\test_ihrm_login.py:101: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\napi\\ihrm_login_api.py:12: in login\n    resp = requests.post(url=&amp;quot;http://ihrm-test.itheima.net/api/sys/login&amp;quot;, json=req_data)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:115: in post\n    return request(&amp;quot;post&amp;quot;, url, data=data, json=json, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:59: in request\n    return session.request(method=method, url=url, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:587: in request\n    resp = self.send(prep, **send_kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:701: in send\n    r = adapter.send(request, **kwargs)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927A1CE10&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n                resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n    \n            # Send the request.\n            else:\n                if hasattr(conn, &amp;quot;proxy_pool&amp;quot;):\n                    conn = conn.proxy_pool\n    \n                low_conn = conn._get_conn(timeout=DEFAULT_POOL_TIMEOUT)\n    \n                try:\n                    skip_host = &amp;quot;Host&amp;quot; in request.headers\n                    low_conn.putrequest(\n                        request.method,\n                        url,\n                        skip_accept_encoding=True,\n                        skip_host=skip_host,\n                    )\n    \n                    for header, value in request.headers.items():\n                        low_conn.putheader(header, value)\n    \n                    low_conn.endheaders()\n    \n                    for i in request.body:\n                        low_conn.send(hex(len(i))[2:].encode(&amp;quot;utf-8&amp;quot;))\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                        low_conn.send(i)\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                    low_conn.send(b&amp;quot;0\\r\\n\\r\\n&amp;quot;)\n    \n                    # Receive the response from the server\n                    r = low_conn.getresponse()\n    \n                    resp = HTTPResponse.from_httplib(\n                        r,\n                        pool=conn,\n                        connection=low_conn,\n                        preload_content=False,\n                        decode_content=False,\n                    )\n                except Exception:\n                    # If we hit any problems here, clean up the connection.\n                    # Then, raise so that we can handle the actual exception.\n                    low_conn.close()\n                    raise\n    \n        except (ProtocolError, OSError) as err:\n            raise ConnectionError(err, request=request)\n    \n        except MaxRetryError as e:\n            if isinstance(e.reason, ConnectTimeoutError):\n                # TODO: Remove this in 3.0.0: see #2811\n                if not isinstance(e.reason, NewConnectionError):\n                    raise ConnectTimeout(e, request=request)\n    \n            if isinstance(e.reason, ResponseError):\n                raise RetryError(e, request=request)\n    \n            if isinstance(e.reason, _ProxyError):\n                raise ProxyError(e, request=request)\n    \n            if isinstance(e.reason, _SSLError):\n                # This branch is for urllib3 v1.22 and later.\n                raise SSLError(e, request=request)\n    \n&amp;gt;           raise ConnectionError(e, request=request)\nE           requests.exceptions.ConnectionError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927A1E790&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:565: ConnectionError\n\n------------------------------ Captured log call -------------------------------\nDEBUG    urllib3.connectionpool:connectionpool.py:228 Starting new HTTP connection (1): ihrm-test.itheima.net:80\n\n&#34;}], &#34;scripts/test_ihrm_login.py::TestIhrmLogin::test10_pwd_1&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Failed&#34;, &#34;testId&#34;: &#34;scripts/test_ihrm_login.py::TestIhrmLogin::test10_pwd_1&#34;, &#34;duration&#34;: &#34;37 ms&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Failed&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;scripts/test_ihrm_login.py::TestIhrmLogin::test10_pwd_1&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;37 ms&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;self = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927C8B590&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n&amp;gt;           conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:174: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\connection.py:72: in create_connection\n    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nhost = &amp;#x27;ihrm-test.itheima.net&amp;#x27;, port = 80, family = &amp;lt;AddressFamily.AF_UNSPEC: 0&amp;gt;, type = &amp;lt;SocketKind.SOCK_STREAM: 1&amp;gt;, proto = 0, flags = 0\n\n    def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):\n        &amp;quot;&amp;quot;&amp;quot;Resolve host and port into list of address info entries.\n    \n        Translate the host/port argument into a sequence of 5-tuples that contain\n        all the necessary arguments for creating a socket connected to that service.\n        host is a domain name, a string representation of an IPv4/v6 address or\n        None. port is a string service name such as &amp;#x27;http&amp;#x27;, a numeric port number or\n        None. By passing None as the value of host and port, you can pass NULL to\n        the underlying C API.\n    \n        The family, type and proto arguments can be optionally specified in order to\n        narrow the list of addresses returned. Passing zero as a value for each of\n        these arguments selects the full range of results.\n        &amp;quot;&amp;quot;&amp;quot;\n        # We override this function since we want to translate the numeric family\n        # and socket type values to enum constants.\n        addrlist = []\n&amp;gt;       for res in _socket.getaddrinfo(host, port, family, type, proto, flags):\nE       socket.gaierror: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\socket.py:962: gaierror\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927C89210&amp;gt;, method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, body = b&amp;#x27;{&amp;quot;mobile&amp;quot;: &amp;quot;13800000002&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;1&amp;quot;}&amp;#x27;\nheaders = {&amp;#x27;User-Agent&amp;#x27;: &amp;#x27;python-requests/2.28.1&amp;#x27;, &amp;#x27;Accept-Encoding&amp;#x27;: &amp;#x27;gzip, deflate&amp;#x27;, &amp;#x27;Accept&amp;#x27;: &amp;#x27;*/*&amp;#x27;, &amp;#x27;Connection&amp;#x27;: &amp;#x27;keep-alive&amp;#x27;, &amp;#x27;Content-Length&amp;#x27;: &amp;#x27;42&amp;#x27;, &amp;#x27;Content-Type&amp;#x27;: &amp;#x27;application/json&amp;#x27;}\nretries = Retry(total=0, connect=None, read=False, redirect=None, status=None), redirect = False, assert_same_host = False, timeout = Timeout(connect=None, read=None, total=None)\npool_timeout = None, release_conn = False, chunked = False, body_pos = None, response_kw = {&amp;#x27;decode_content&amp;#x27;: False, &amp;#x27;preload_content&amp;#x27;: False}\nparsed_url = Url(scheme=None, auth=None, host=None, port=None, path=&amp;#x27;/api/sys/login&amp;#x27;, query=None, fragment=None), destination_scheme = None, conn = None, release_this_conn = True\nhttp_tunnel_required = False, err = None, clean_exit = False\n\n    def urlopen(\n        self,\n        method,\n        url,\n        body=None,\n        headers=None,\n        retries=None,\n        redirect=True,\n        assert_same_host=True,\n        timeout=_Default,\n        pool_timeout=None,\n        release_conn=None,\n        chunked=False,\n        body_pos=None,\n        **response_kw\n    ):\n        &amp;quot;&amp;quot;&amp;quot;\n        Get a connection from the pool and perform an HTTP request. This is the\n        lowest level call for making a request, so you&amp;#x27;ll need to specify all\n        the raw details.\n    \n        .. note::\n    \n           More commonly, it&amp;#x27;s appropriate to use a convenience method provided\n           by :class:`.RequestMethods`, such as :meth:`request`.\n    \n        .. note::\n    \n           `release_conn` will only behave as expected if\n           `preload_content=False` because we want to make\n           `preload_content=False` the default behaviour someday soon without\n           breaking backwards compatibility.\n    \n        :param method:\n            HTTP request method (such as GET, POST, PUT, etc.)\n    \n        :param url:\n            The URL to perform the request on.\n    \n        :param body:\n            Data to send in the request body, either :class:`str`, :class:`bytes`,\n            an iterable of :class:`str`/:class:`bytes`, or a file-like object.\n    \n        :param headers:\n            Dictionary of custom headers to send, such as User-Agent,\n            If-None-Match, etc. If None, pool headers are used. If provided,\n            these headers completely replace any pool-specific headers.\n    \n        :param retries:\n            Configure the number of retries to allow before raising a\n            :class:`~urllib3.exceptions.MaxRetryError` exception.\n    \n            Pass ``None`` to retry until you receive a response. Pass a\n            :class:`~urllib3.util.retry.Retry` object for fine-grained control\n            over different types of retries.\n            Pass an integer number to retry connection errors that many times,\n            but no other types of errors. Pass zero to never retry.\n    \n            If ``False``, then retries are disabled and any exception is raised\n            immediately. Also, instead of raising a MaxRetryError on redirects,\n            the redirect response will be returned.\n    \n        :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.\n    \n        :param redirect:\n            If True, automatically handle redirects (status codes 301, 302,\n            303, 307, 308). Each redirect counts as a retry. Disabling retries\n            will disable redirect, too.\n    \n        :param assert_same_host:\n            If ``True``, will make sure that the host of the pool requests is\n            consistent else will raise HostChangedError. When ``False``, you can\n            use the pool on an HTTP proxy and request foreign hosts.\n    \n        :param timeout:\n            If specified, overrides the default timeout for this one\n            request. It may be a float (in seconds) or an instance of\n            :class:`urllib3.util.Timeout`.\n    \n        :param pool_timeout:\n            If set and the pool is set to block=True, then this method will\n            block for ``pool_timeout`` seconds and raise EmptyPoolError if no\n            connection is available within the time period.\n    \n        :param release_conn:\n            If False, then the urlopen call will not release the connection\n            back into the pool once a response is received (but will release if\n            you read the entire contents of the response such as when\n            `preload_content=True`). This is useful if you&amp;#x27;re not preloading\n            the response&amp;#x27;s content immediately. You will need to call\n            ``r.release_conn()`` on the response ``r`` to return the connection\n            back into the pool. If None, it takes the value of\n            ``response_kw.get(&amp;#x27;preload_content&amp;#x27;, True)``.\n    \n        :param chunked:\n            If True, urllib3 will send the body using chunked transfer\n            encoding. Otherwise, urllib3 will send the body using the standard\n            content-length form. Defaults to False.\n    \n        :param int body_pos:\n            Position to seek to in file-like body in the event of a retry or\n            redirect. Typically this won&amp;#x27;t need to be set because urllib3 will\n            auto-populate the value when needed.\n    \n        :param \\\\**response_kw:\n            Additional parameters are passed to\n            :meth:`urllib3.response.HTTPResponse.from_httplib`\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        parsed_url = parse_url(url)\n        destination_scheme = parsed_url.scheme\n    \n        if headers is None:\n            headers = self.headers\n    \n        if not isinstance(retries, Retry):\n            retries = Retry.from_int(retries, redirect=redirect, default=self.retries)\n    \n        if release_conn is None:\n            release_conn = response_kw.get(&amp;quot;preload_content&amp;quot;, True)\n    \n        # Check host\n        if assert_same_host and not self.is_same_host(url):\n            raise HostChangedError(self, url, retries)\n    \n        # Ensure that the URL we&amp;#x27;re connecting to is properly encoded\n        if url.startswith(&amp;quot;/&amp;quot;):\n            url = six.ensure_str(_encode_target(url))\n        else:\n            url = six.ensure_str(parsed_url.url)\n    \n        conn = None\n    \n        # Track whether `conn` needs to be released before\n        # returning/raising/recursing. Update this variable if necessary, and\n        # leave `release_conn` constant throughout the function. That way, if\n        # the function recurses, the original value of `release_conn` will be\n        # passed down into the recursive call, and its value will be respected.\n        #\n        # See issue #651 [1] for details.\n        #\n        # [1] &amp;lt;https://github.com/urllib3/urllib3/issues/651&amp;gt;\n        release_this_conn = release_conn\n    \n        http_tunnel_required = connection_requires_http_tunnel(\n            self.proxy, self.proxy_config, destination_scheme\n        )\n    \n        # Merge the proxy headers. Only done when not using HTTP CONNECT. We\n        # have to copy the headers dict so we can safely change it without those\n        # changes being reflected in anyone else&amp;#x27;s copy.\n        if not http_tunnel_required:\n            headers = headers.copy()\n            headers.update(self.proxy_headers)\n    \n        # Must keep the exception bound to a separate variable or else Python 3\n        # complains about UnboundLocalError.\n        err = None\n    \n        # Keep track of whether we cleanly exited the except block. This\n        # ensures we do proper cleanup in finally.\n        clean_exit = False\n    \n        # Rewind body position, if needed. Record current position\n        # for future rewinds in the event of a redirect/retry.\n        body_pos = set_file_position(body, body_pos)\n    \n        try:\n            # Request a connection from the queue.\n            timeout_obj = self._get_timeout(timeout)\n            conn = self._get_conn(timeout=pool_timeout)\n    \n            conn.timeout = timeout_obj.connect_timeout\n    \n            is_new_proxy_conn = self.proxy is not None and not getattr(\n                conn, &amp;quot;sock&amp;quot;, None\n            )\n            if is_new_proxy_conn and http_tunnel_required:\n                self._prepare_proxy(conn)\n    \n            # Make the request on the httplib connection object.\n&amp;gt;           httplib_response = self._make_request(\n                conn,\n                method,\n                url,\n                timeout=timeout_obj,\n                body=body,\n                headers=headers,\n                chunked=chunked,\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:703: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:398: in _make_request\n    conn.request(method, url, **httplib_request_kw)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:239: in request\n    super(HTTPConnection, self).request(method, url, body=body, headers=headers)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1282: in request\n    self._send_request(method, url, body, headers, encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1328: in _send_request\n    self.endheaders(body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1277: in endheaders\n    self._send_output(message_body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1037: in _send_output\n    self.send(msg)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:975: in send\n    self.connect()\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:205: in connect\n    conn = self._new_conn()\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927C8B590&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n            conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n    \n        except SocketTimeout:\n            raise ConnectTimeoutError(\n                self,\n                &amp;quot;Connection to %s timed out. (connect timeout=%s)&amp;quot;\n                % (self.host, self.timeout),\n            )\n    \n        except SocketError as e:\n&amp;gt;           raise NewConnectionError(\n                self, &amp;quot;Failed to establish a new connection: %s&amp;quot; % e\n            )\nE           urllib3.exceptions.NewConnectionError: &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927C8B590&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:186: NewConnectionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927415550&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n&amp;gt;               resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:489: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:787: in urlopen\n    retries = retries.increment(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = Retry(total=0, connect=None, read=False, redirect=None, status=None), method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, response = None\nerror = NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927C8B590&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;)\n_pool = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927C89210&amp;gt;, _stacktrace = &amp;lt;traceback object at 0x0000023927C89500&amp;gt;\n\n    def increment(\n        self,\n        method=None,\n        url=None,\n        response=None,\n        error=None,\n        _pool=None,\n        _stacktrace=None,\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Return a new Retry object with incremented retry counters.\n    \n        :param response: A response object, or None, if the server did not\n            return a response.\n        :type response: :class:`~urllib3.response.HTTPResponse`\n        :param Exception error: An error encountered during the request, or\n            None if the response was received successfully.\n    \n        :return: A new ``Retry`` object.\n        &amp;quot;&amp;quot;&amp;quot;\n        if self.total is False and error:\n            # Disabled, indicate to re-raise the error.\n            raise six.reraise(type(error), error, _stacktrace)\n    \n        total = self.total\n        if total is not None:\n            total -= 1\n    \n        connect = self.connect\n        read = self.read\n        redirect = self.redirect\n        status_count = self.status\n        other = self.other\n        cause = &amp;quot;unknown&amp;quot;\n        status = None\n        redirect_location = None\n    \n        if error and self._is_connection_error(error):\n            # Connect retry?\n            if connect is False:\n                raise six.reraise(type(error), error, _stacktrace)\n            elif connect is not None:\n                connect -= 1\n    \n        elif error and self._is_read_error(error):\n            # Read retry?\n            if read is False or not self._is_method_retryable(method):\n                raise six.reraise(type(error), error, _stacktrace)\n            elif read is not None:\n                read -= 1\n    \n        elif error:\n            # Other retry?\n            if other is not None:\n                other -= 1\n    \n        elif response and response.get_redirect_location():\n            # Redirect retry?\n            if redirect is not None:\n                redirect -= 1\n            cause = &amp;quot;too many redirects&amp;quot;\n            redirect_location = response.get_redirect_location()\n            status = response.status\n    \n        else:\n            # Incrementing because of a server error like a 500 in\n            # status_forcelist and the given method is in the allowed_methods\n            cause = ResponseError.GENERIC_ERROR\n            if response and response.status:\n                if status_count is not None:\n                    status_count -= 1\n                cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status)\n                status = response.status\n    \n        history = self.history + (\n            RequestHistory(method, url, error, status, redirect_location),\n        )\n    \n        new_retry = self.new(\n            total=total,\n            connect=connect,\n            read=read,\n            redirect=redirect,\n            status=status_count,\n            other=other,\n            history=history,\n        )\n    \n        if new_retry.is_exhausted():\n&amp;gt;           raise MaxRetryError(_pool, url, error or ResponseError(cause))\nE           urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927C8B590&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\retry.py:592: MaxRetryError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;scripts.test_ihrm_login.TestIhrmLogin object at 0x0000023927299610&amp;gt;\n\n    def test10_pwd_1(self):\n        data = {&amp;quot;mobile&amp;quot;: &amp;quot;13800000002&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;1&amp;quot;}\n&amp;gt;       resp = IhrmLoginApi.login(data)\n\nscripts\\test_ihrm_login.py:107: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\napi\\ihrm_login_api.py:12: in login\n    resp = requests.post(url=&amp;quot;http://ihrm-test.itheima.net/api/sys/login&amp;quot;, json=req_data)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:115: in post\n    return request(&amp;quot;post&amp;quot;, url, data=data, json=json, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:59: in request\n    return session.request(method=method, url=url, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:587: in request\n    resp = self.send(prep, **send_kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:701: in send\n    r = adapter.send(request, **kwargs)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927415550&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n                resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n    \n            # Send the request.\n            else:\n                if hasattr(conn, &amp;quot;proxy_pool&amp;quot;):\n                    conn = conn.proxy_pool\n    \n                low_conn = conn._get_conn(timeout=DEFAULT_POOL_TIMEOUT)\n    \n                try:\n                    skip_host = &amp;quot;Host&amp;quot; in request.headers\n                    low_conn.putrequest(\n                        request.method,\n                        url,\n                        skip_accept_encoding=True,\n                        skip_host=skip_host,\n                    )\n    \n                    for header, value in request.headers.items():\n                        low_conn.putheader(header, value)\n    \n                    low_conn.endheaders()\n    \n                    for i in request.body:\n                        low_conn.send(hex(len(i))[2:].encode(&amp;quot;utf-8&amp;quot;))\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                        low_conn.send(i)\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                    low_conn.send(b&amp;quot;0\\r\\n\\r\\n&amp;quot;)\n    \n                    # Receive the response from the server\n                    r = low_conn.getresponse()\n    \n                    resp = HTTPResponse.from_httplib(\n                        r,\n                        pool=conn,\n                        connection=low_conn,\n                        preload_content=False,\n                        decode_content=False,\n                    )\n                except Exception:\n                    # If we hit any problems here, clean up the connection.\n                    # Then, raise so that we can handle the actual exception.\n                    low_conn.close()\n                    raise\n    \n        except (ProtocolError, OSError) as err:\n            raise ConnectionError(err, request=request)\n    \n        except MaxRetryError as e:\n            if isinstance(e.reason, ConnectTimeoutError):\n                # TODO: Remove this in 3.0.0: see #2811\n                if not isinstance(e.reason, NewConnectionError):\n                    raise ConnectTimeout(e, request=request)\n    \n            if isinstance(e.reason, ResponseError):\n                raise RetryError(e, request=request)\n    \n            if isinstance(e.reason, _ProxyError):\n                raise ProxyError(e, request=request)\n    \n            if isinstance(e.reason, _SSLError):\n                # This branch is for urllib3 v1.22 and later.\n                raise SSLError(e, request=request)\n    \n&amp;gt;           raise ConnectionError(e, request=request)\nE           requests.exceptions.ConnectionError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927C8B590&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:565: ConnectionError\n\n------------------------------ Captured log call -------------------------------\nDEBUG    urllib3.connectionpool:connectionpool.py:228 Starting new HTTP connection (1): ihrm-test.itheima.net:80\n\n&#34;}], &#34;scripts/test_ihrm_login.py::TestIhrmLogin::test11_pwd_100&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Failed&#34;, &#34;testId&#34;: &#34;scripts/test_ihrm_login.py::TestIhrmLogin::test11_pwd_100&#34;, &#34;duration&#34;: &#34;39 ms&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Failed&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;scripts/test_ihrm_login.py::TestIhrmLogin::test11_pwd_100&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;39 ms&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;self = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927CC30D0&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n&amp;gt;           conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:174: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\connection.py:72: in create_connection\n    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nhost = &amp;#x27;ihrm-test.itheima.net&amp;#x27;, port = 80, family = &amp;lt;AddressFamily.AF_UNSPEC: 0&amp;gt;, type = &amp;lt;SocketKind.SOCK_STREAM: 1&amp;gt;, proto = 0, flags = 0\n\n    def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):\n        &amp;quot;&amp;quot;&amp;quot;Resolve host and port into list of address info entries.\n    \n        Translate the host/port argument into a sequence of 5-tuples that contain\n        all the necessary arguments for creating a socket connected to that service.\n        host is a domain name, a string representation of an IPv4/v6 address or\n        None. port is a string service name such as &amp;#x27;http&amp;#x27;, a numeric port number or\n        None. By passing None as the value of host and port, you can pass NULL to\n        the underlying C API.\n    \n        The family, type and proto arguments can be optionally specified in order to\n        narrow the list of addresses returned. Passing zero as a value for each of\n        these arguments selects the full range of results.\n        &amp;quot;&amp;quot;&amp;quot;\n        # We override this function since we want to translate the numeric family\n        # and socket type values to enum constants.\n        addrlist = []\n&amp;gt;       for res in _socket.getaddrinfo(host, port, family, type, proto, flags):\nE       socket.gaierror: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\socket.py:962: gaierror\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927CC3B10&amp;gt;, method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;\nbody = b&amp;#x27;{&amp;quot;mobile&amp;quot;: &amp;quot;13800000002&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890&amp;quot;}&amp;#x27;\nheaders = {&amp;#x27;User-Agent&amp;#x27;: &amp;#x27;python-requests/2.28.1&amp;#x27;, &amp;#x27;Accept-Encoding&amp;#x27;: &amp;#x27;gzip, deflate&amp;#x27;, &amp;#x27;Accept&amp;#x27;: &amp;#x27;*/*&amp;#x27;, &amp;#x27;Connection&amp;#x27;: &amp;#x27;keep-alive&amp;#x27;, &amp;#x27;Content-Length&amp;#x27;: &amp;#x27;141&amp;#x27;, &amp;#x27;Content-Type&amp;#x27;: &amp;#x27;application/json&amp;#x27;}\nretries = Retry(total=0, connect=None, read=False, redirect=None, status=None), redirect = False, assert_same_host = False, timeout = Timeout(connect=None, read=None, total=None)\npool_timeout = None, release_conn = False, chunked = False, body_pos = None, response_kw = {&amp;#x27;decode_content&amp;#x27;: False, &amp;#x27;preload_content&amp;#x27;: False}\nparsed_url = Url(scheme=None, auth=None, host=None, port=None, path=&amp;#x27;/api/sys/login&amp;#x27;, query=None, fragment=None), destination_scheme = None, conn = None, release_this_conn = True\nhttp_tunnel_required = False, err = None, clean_exit = False\n\n    def urlopen(\n        self,\n        method,\n        url,\n        body=None,\n        headers=None,\n        retries=None,\n        redirect=True,\n        assert_same_host=True,\n        timeout=_Default,\n        pool_timeout=None,\n        release_conn=None,\n        chunked=False,\n        body_pos=None,\n        **response_kw\n    ):\n        &amp;quot;&amp;quot;&amp;quot;\n        Get a connection from the pool and perform an HTTP request. This is the\n        lowest level call for making a request, so you&amp;#x27;ll need to specify all\n        the raw details.\n    \n        .. note::\n    \n           More commonly, it&amp;#x27;s appropriate to use a convenience method provided\n           by :class:`.RequestMethods`, such as :meth:`request`.\n    \n        .. note::\n    \n           `release_conn` will only behave as expected if\n           `preload_content=False` because we want to make\n           `preload_content=False` the default behaviour someday soon without\n           breaking backwards compatibility.\n    \n        :param method:\n            HTTP request method (such as GET, POST, PUT, etc.)\n    \n        :param url:\n            The URL to perform the request on.\n    \n        :param body:\n            Data to send in the request body, either :class:`str`, :class:`bytes`,\n            an iterable of :class:`str`/:class:`bytes`, or a file-like object.\n    \n        :param headers:\n            Dictionary of custom headers to send, such as User-Agent,\n            If-None-Match, etc. If None, pool headers are used. If provided,\n            these headers completely replace any pool-specific headers.\n    \n        :param retries:\n            Configure the number of retries to allow before raising a\n            :class:`~urllib3.exceptions.MaxRetryError` exception.\n    \n            Pass ``None`` to retry until you receive a response. Pass a\n            :class:`~urllib3.util.retry.Retry` object for fine-grained control\n            over different types of retries.\n            Pass an integer number to retry connection errors that many times,\n            but no other types of errors. Pass zero to never retry.\n    \n            If ``False``, then retries are disabled and any exception is raised\n            immediately. Also, instead of raising a MaxRetryError on redirects,\n            the redirect response will be returned.\n    \n        :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.\n    \n        :param redirect:\n            If True, automatically handle redirects (status codes 301, 302,\n            303, 307, 308). Each redirect counts as a retry. Disabling retries\n            will disable redirect, too.\n    \n        :param assert_same_host:\n            If ``True``, will make sure that the host of the pool requests is\n            consistent else will raise HostChangedError. When ``False``, you can\n            use the pool on an HTTP proxy and request foreign hosts.\n    \n        :param timeout:\n            If specified, overrides the default timeout for this one\n            request. It may be a float (in seconds) or an instance of\n            :class:`urllib3.util.Timeout`.\n    \n        :param pool_timeout:\n            If set and the pool is set to block=True, then this method will\n            block for ``pool_timeout`` seconds and raise EmptyPoolError if no\n            connection is available within the time period.\n    \n        :param release_conn:\n            If False, then the urlopen call will not release the connection\n            back into the pool once a response is received (but will release if\n            you read the entire contents of the response such as when\n            `preload_content=True`). This is useful if you&amp;#x27;re not preloading\n            the response&amp;#x27;s content immediately. You will need to call\n            ``r.release_conn()`` on the response ``r`` to return the connection\n            back into the pool. If None, it takes the value of\n            ``response_kw.get(&amp;#x27;preload_content&amp;#x27;, True)``.\n    \n        :param chunked:\n            If True, urllib3 will send the body using chunked transfer\n            encoding. Otherwise, urllib3 will send the body using the standard\n            content-length form. Defaults to False.\n    \n        :param int body_pos:\n            Position to seek to in file-like body in the event of a retry or\n            redirect. Typically this won&amp;#x27;t need to be set because urllib3 will\n            auto-populate the value when needed.\n    \n        :param \\\\**response_kw:\n            Additional parameters are passed to\n            :meth:`urllib3.response.HTTPResponse.from_httplib`\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        parsed_url = parse_url(url)\n        destination_scheme = parsed_url.scheme\n    \n        if headers is None:\n            headers = self.headers\n    \n        if not isinstance(retries, Retry):\n            retries = Retry.from_int(retries, redirect=redirect, default=self.retries)\n    \n        if release_conn is None:\n            release_conn = response_kw.get(&amp;quot;preload_content&amp;quot;, True)\n    \n        # Check host\n        if assert_same_host and not self.is_same_host(url):\n            raise HostChangedError(self, url, retries)\n    \n        # Ensure that the URL we&amp;#x27;re connecting to is properly encoded\n        if url.startswith(&amp;quot;/&amp;quot;):\n            url = six.ensure_str(_encode_target(url))\n        else:\n            url = six.ensure_str(parsed_url.url)\n    \n        conn = None\n    \n        # Track whether `conn` needs to be released before\n        # returning/raising/recursing. Update this variable if necessary, and\n        # leave `release_conn` constant throughout the function. That way, if\n        # the function recurses, the original value of `release_conn` will be\n        # passed down into the recursive call, and its value will be respected.\n        #\n        # See issue #651 [1] for details.\n        #\n        # [1] &amp;lt;https://github.com/urllib3/urllib3/issues/651&amp;gt;\n        release_this_conn = release_conn\n    \n        http_tunnel_required = connection_requires_http_tunnel(\n            self.proxy, self.proxy_config, destination_scheme\n        )\n    \n        # Merge the proxy headers. Only done when not using HTTP CONNECT. We\n        # have to copy the headers dict so we can safely change it without those\n        # changes being reflected in anyone else&amp;#x27;s copy.\n        if not http_tunnel_required:\n            headers = headers.copy()\n            headers.update(self.proxy_headers)\n    \n        # Must keep the exception bound to a separate variable or else Python 3\n        # complains about UnboundLocalError.\n        err = None\n    \n        # Keep track of whether we cleanly exited the except block. This\n        # ensures we do proper cleanup in finally.\n        clean_exit = False\n    \n        # Rewind body position, if needed. Record current position\n        # for future rewinds in the event of a redirect/retry.\n        body_pos = set_file_position(body, body_pos)\n    \n        try:\n            # Request a connection from the queue.\n            timeout_obj = self._get_timeout(timeout)\n            conn = self._get_conn(timeout=pool_timeout)\n    \n            conn.timeout = timeout_obj.connect_timeout\n    \n            is_new_proxy_conn = self.proxy is not None and not getattr(\n                conn, &amp;quot;sock&amp;quot;, None\n            )\n            if is_new_proxy_conn and http_tunnel_required:\n                self._prepare_proxy(conn)\n    \n            # Make the request on the httplib connection object.\n&amp;gt;           httplib_response = self._make_request(\n                conn,\n                method,\n                url,\n                timeout=timeout_obj,\n                body=body,\n                headers=headers,\n                chunked=chunked,\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:703: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:398: in _make_request\n    conn.request(method, url, **httplib_request_kw)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:239: in request\n    super(HTTPConnection, self).request(method, url, body=body, headers=headers)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1282: in request\n    self._send_request(method, url, body, headers, encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1328: in _send_request\n    self.endheaders(body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1277: in endheaders\n    self._send_output(message_body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1037: in _send_output\n    self.send(msg)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:975: in send\n    self.connect()\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:205: in connect\n    conn = self._new_conn()\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927CC30D0&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n            conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n    \n        except SocketTimeout:\n            raise ConnectTimeoutError(\n                self,\n                &amp;quot;Connection to %s timed out. (connect timeout=%s)&amp;quot;\n                % (self.host, self.timeout),\n            )\n    \n        except SocketError as e:\n&amp;gt;           raise NewConnectionError(\n                self, &amp;quot;Failed to establish a new connection: %s&amp;quot; % e\n            )\nE           urllib3.exceptions.NewConnectionError: &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927CC30D0&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:186: NewConnectionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927CC1750&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n&amp;gt;               resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:489: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:787: in urlopen\n    retries = retries.increment(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = Retry(total=0, connect=None, read=False, redirect=None, status=None), method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, response = None\nerror = NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927CC30D0&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;)\n_pool = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927CC3B10&amp;gt;, _stacktrace = &amp;lt;traceback object at 0x0000023927CC1640&amp;gt;\n\n    def increment(\n        self,\n        method=None,\n        url=None,\n        response=None,\n        error=None,\n        _pool=None,\n        _stacktrace=None,\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Return a new Retry object with incremented retry counters.\n    \n        :param response: A response object, or None, if the server did not\n            return a response.\n        :type response: :class:`~urllib3.response.HTTPResponse`\n        :param Exception error: An error encountered during the request, or\n            None if the response was received successfully.\n    \n        :return: A new ``Retry`` object.\n        &amp;quot;&amp;quot;&amp;quot;\n        if self.total is False and error:\n            # Disabled, indicate to re-raise the error.\n            raise six.reraise(type(error), error, _stacktrace)\n    \n        total = self.total\n        if total is not None:\n            total -= 1\n    \n        connect = self.connect\n        read = self.read\n        redirect = self.redirect\n        status_count = self.status\n        other = self.other\n        cause = &amp;quot;unknown&amp;quot;\n        status = None\n        redirect_location = None\n    \n        if error and self._is_connection_error(error):\n            # Connect retry?\n            if connect is False:\n                raise six.reraise(type(error), error, _stacktrace)\n            elif connect is not None:\n                connect -= 1\n    \n        elif error and self._is_read_error(error):\n            # Read retry?\n            if read is False or not self._is_method_retryable(method):\n                raise six.reraise(type(error), error, _stacktrace)\n            elif read is not None:\n                read -= 1\n    \n        elif error:\n            # Other retry?\n            if other is not None:\n                other -= 1\n    \n        elif response and response.get_redirect_location():\n            # Redirect retry?\n            if redirect is not None:\n                redirect -= 1\n            cause = &amp;quot;too many redirects&amp;quot;\n            redirect_location = response.get_redirect_location()\n            status = response.status\n    \n        else:\n            # Incrementing because of a server error like a 500 in\n            # status_forcelist and the given method is in the allowed_methods\n            cause = ResponseError.GENERIC_ERROR\n            if response and response.status:\n                if status_count is not None:\n                    status_count -= 1\n                cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status)\n                status = response.status\n    \n        history = self.history + (\n            RequestHistory(method, url, error, status, redirect_location),\n        )\n    \n        new_retry = self.new(\n            total=total,\n            connect=connect,\n            read=read,\n            redirect=redirect,\n            status=status_count,\n            other=other,\n            history=history,\n        )\n    \n        if new_retry.is_exhausted():\n&amp;gt;           raise MaxRetryError(_pool, url, error or ResponseError(cause))\nE           urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927CC30D0&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\retry.py:592: MaxRetryError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;scripts.test_ihrm_login.TestIhrmLogin object at 0x0000023927299990&amp;gt;\n\n    def test11_pwd_100(self):\n        data = {&amp;quot;mobile&amp;quot;: &amp;quot;13800000002&amp;quot;,\n                &amp;quot;password&amp;quot;: &amp;quot;1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890&amp;quot;}\n&amp;gt;       resp = IhrmLoginApi.login(data)\n\nscripts\\test_ihrm_login.py:114: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\napi\\ihrm_login_api.py:12: in login\n    resp = requests.post(url=&amp;quot;http://ihrm-test.itheima.net/api/sys/login&amp;quot;, json=req_data)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:115: in post\n    return request(&amp;quot;post&amp;quot;, url, data=data, json=json, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:59: in request\n    return session.request(method=method, url=url, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:587: in request\n    resp = self.send(prep, **send_kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:701: in send\n    r = adapter.send(request, **kwargs)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927CC1750&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n                resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n    \n            # Send the request.\n            else:\n                if hasattr(conn, &amp;quot;proxy_pool&amp;quot;):\n                    conn = conn.proxy_pool\n    \n                low_conn = conn._get_conn(timeout=DEFAULT_POOL_TIMEOUT)\n    \n                try:\n                    skip_host = &amp;quot;Host&amp;quot; in request.headers\n                    low_conn.putrequest(\n                        request.method,\n                        url,\n                        skip_accept_encoding=True,\n                        skip_host=skip_host,\n                    )\n    \n                    for header, value in request.headers.items():\n                        low_conn.putheader(header, value)\n    \n                    low_conn.endheaders()\n    \n                    for i in request.body:\n                        low_conn.send(hex(len(i))[2:].encode(&amp;quot;utf-8&amp;quot;))\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                        low_conn.send(i)\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                    low_conn.send(b&amp;quot;0\\r\\n\\r\\n&amp;quot;)\n    \n                    # Receive the response from the server\n                    r = low_conn.getresponse()\n    \n                    resp = HTTPResponse.from_httplib(\n                        r,\n                        pool=conn,\n                        connection=low_conn,\n                        preload_content=False,\n                        decode_content=False,\n                    )\n                except Exception:\n                    # If we hit any problems here, clean up the connection.\n                    # Then, raise so that we can handle the actual exception.\n                    low_conn.close()\n                    raise\n    \n        except (ProtocolError, OSError) as err:\n            raise ConnectionError(err, request=request)\n    \n        except MaxRetryError as e:\n            if isinstance(e.reason, ConnectTimeoutError):\n                # TODO: Remove this in 3.0.0: see #2811\n                if not isinstance(e.reason, NewConnectionError):\n                    raise ConnectTimeout(e, request=request)\n    \n            if isinstance(e.reason, ResponseError):\n                raise RetryError(e, request=request)\n    \n            if isinstance(e.reason, _ProxyError):\n                raise ProxyError(e, request=request)\n    \n            if isinstance(e.reason, _SSLError):\n                # This branch is for urllib3 v1.22 and later.\n                raise SSLError(e, request=request)\n    \n&amp;gt;           raise ConnectionError(e, request=request)\nE           requests.exceptions.ConnectionError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927CC30D0&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:565: ConnectionError\n\n------------------------------ Captured log call -------------------------------\nDEBUG    urllib3.connectionpool:connectionpool.py:228 Starting new HTTP connection (1): ihrm-test.itheima.net:80\n\n&#34;}], &#34;scripts/test_ihrm_login.py::TestIhrmLogin::test12_more_params&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Failed&#34;, &#34;testId&#34;: &#34;scripts/test_ihrm_login.py::TestIhrmLogin::test12_more_params&#34;, &#34;duration&#34;: &#34;67 ms&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Failed&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;scripts/test_ihrm_login.py::TestIhrmLogin::test12_more_params&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;67 ms&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;self = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927823350&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n&amp;gt;           conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:174: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\connection.py:72: in create_connection\n    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nhost = &amp;#x27;ihrm-test.itheima.net&amp;#x27;, port = 80, family = &amp;lt;AddressFamily.AF_UNSPEC: 0&amp;gt;, type = &amp;lt;SocketKind.SOCK_STREAM: 1&amp;gt;, proto = 0, flags = 0\n\n    def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):\n        &amp;quot;&amp;quot;&amp;quot;Resolve host and port into list of address info entries.\n    \n        Translate the host/port argument into a sequence of 5-tuples that contain\n        all the necessary arguments for creating a socket connected to that service.\n        host is a domain name, a string representation of an IPv4/v6 address or\n        None. port is a string service name such as &amp;#x27;http&amp;#x27;, a numeric port number or\n        None. By passing None as the value of host and port, you can pass NULL to\n        the underlying C API.\n    \n        The family, type and proto arguments can be optionally specified in order to\n        narrow the list of addresses returned. Passing zero as a value for each of\n        these arguments selects the full range of results.\n        &amp;quot;&amp;quot;&amp;quot;\n        # We override this function since we want to translate the numeric family\n        # and socket type values to enum constants.\n        addrlist = []\n&amp;gt;       for res in _socket.getaddrinfo(host, port, family, type, proto, flags):\nE       socket.gaierror: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\socket.py:962: gaierror\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927823950&amp;gt;, method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;\nbody = b&amp;#x27;{&amp;quot;mobile&amp;quot;: &amp;quot;13800000002&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;123456&amp;quot;, &amp;quot;abc&amp;quot;: &amp;quot;123&amp;quot;}&amp;#x27;\nheaders = {&amp;#x27;User-Agent&amp;#x27;: &amp;#x27;python-requests/2.28.1&amp;#x27;, &amp;#x27;Accept-Encoding&amp;#x27;: &amp;#x27;gzip, deflate&amp;#x27;, &amp;#x27;Accept&amp;#x27;: &amp;#x27;*/*&amp;#x27;, &amp;#x27;Connection&amp;#x27;: &amp;#x27;keep-alive&amp;#x27;, &amp;#x27;Content-Length&amp;#x27;: &amp;#x27;61&amp;#x27;, &amp;#x27;Content-Type&amp;#x27;: &amp;#x27;application/json&amp;#x27;}\nretries = Retry(total=0, connect=None, read=False, redirect=None, status=None), redirect = False, assert_same_host = False, timeout = Timeout(connect=None, read=None, total=None)\npool_timeout = None, release_conn = False, chunked = False, body_pos = None, response_kw = {&amp;#x27;decode_content&amp;#x27;: False, &amp;#x27;preload_content&amp;#x27;: False}\nparsed_url = Url(scheme=None, auth=None, host=None, port=None, path=&amp;#x27;/api/sys/login&amp;#x27;, query=None, fragment=None), destination_scheme = None, conn = None, release_this_conn = True\nhttp_tunnel_required = False, err = None, clean_exit = False\n\n    def urlopen(\n        self,\n        method,\n        url,\n        body=None,\n        headers=None,\n        retries=None,\n        redirect=True,\n        assert_same_host=True,\n        timeout=_Default,\n        pool_timeout=None,\n        release_conn=None,\n        chunked=False,\n        body_pos=None,\n        **response_kw\n    ):\n        &amp;quot;&amp;quot;&amp;quot;\n        Get a connection from the pool and perform an HTTP request. This is the\n        lowest level call for making a request, so you&amp;#x27;ll need to specify all\n        the raw details.\n    \n        .. note::\n    \n           More commonly, it&amp;#x27;s appropriate to use a convenience method provided\n           by :class:`.RequestMethods`, such as :meth:`request`.\n    \n        .. note::\n    \n           `release_conn` will only behave as expected if\n           `preload_content=False` because we want to make\n           `preload_content=False` the default behaviour someday soon without\n           breaking backwards compatibility.\n    \n        :param method:\n            HTTP request method (such as GET, POST, PUT, etc.)\n    \n        :param url:\n            The URL to perform the request on.\n    \n        :param body:\n            Data to send in the request body, either :class:`str`, :class:`bytes`,\n            an iterable of :class:`str`/:class:`bytes`, or a file-like object.\n    \n        :param headers:\n            Dictionary of custom headers to send, such as User-Agent,\n            If-None-Match, etc. If None, pool headers are used. If provided,\n            these headers completely replace any pool-specific headers.\n    \n        :param retries:\n            Configure the number of retries to allow before raising a\n            :class:`~urllib3.exceptions.MaxRetryError` exception.\n    \n            Pass ``None`` to retry until you receive a response. Pass a\n            :class:`~urllib3.util.retry.Retry` object for fine-grained control\n            over different types of retries.\n            Pass an integer number to retry connection errors that many times,\n            but no other types of errors. Pass zero to never retry.\n    \n            If ``False``, then retries are disabled and any exception is raised\n            immediately. Also, instead of raising a MaxRetryError on redirects,\n            the redirect response will be returned.\n    \n        :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.\n    \n        :param redirect:\n            If True, automatically handle redirects (status codes 301, 302,\n            303, 307, 308). Each redirect counts as a retry. Disabling retries\n            will disable redirect, too.\n    \n        :param assert_same_host:\n            If ``True``, will make sure that the host of the pool requests is\n            consistent else will raise HostChangedError. When ``False``, you can\n            use the pool on an HTTP proxy and request foreign hosts.\n    \n        :param timeout:\n            If specified, overrides the default timeout for this one\n            request. It may be a float (in seconds) or an instance of\n            :class:`urllib3.util.Timeout`.\n    \n        :param pool_timeout:\n            If set and the pool is set to block=True, then this method will\n            block for ``pool_timeout`` seconds and raise EmptyPoolError if no\n            connection is available within the time period.\n    \n        :param release_conn:\n            If False, then the urlopen call will not release the connection\n            back into the pool once a response is received (but will release if\n            you read the entire contents of the response such as when\n            `preload_content=True`). This is useful if you&amp;#x27;re not preloading\n            the response&amp;#x27;s content immediately. You will need to call\n            ``r.release_conn()`` on the response ``r`` to return the connection\n            back into the pool. If None, it takes the value of\n            ``response_kw.get(&amp;#x27;preload_content&amp;#x27;, True)``.\n    \n        :param chunked:\n            If True, urllib3 will send the body using chunked transfer\n            encoding. Otherwise, urllib3 will send the body using the standard\n            content-length form. Defaults to False.\n    \n        :param int body_pos:\n            Position to seek to in file-like body in the event of a retry or\n            redirect. Typically this won&amp;#x27;t need to be set because urllib3 will\n            auto-populate the value when needed.\n    \n        :param \\\\**response_kw:\n            Additional parameters are passed to\n            :meth:`urllib3.response.HTTPResponse.from_httplib`\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        parsed_url = parse_url(url)\n        destination_scheme = parsed_url.scheme\n    \n        if headers is None:\n            headers = self.headers\n    \n        if not isinstance(retries, Retry):\n            retries = Retry.from_int(retries, redirect=redirect, default=self.retries)\n    \n        if release_conn is None:\n            release_conn = response_kw.get(&amp;quot;preload_content&amp;quot;, True)\n    \n        # Check host\n        if assert_same_host and not self.is_same_host(url):\n            raise HostChangedError(self, url, retries)\n    \n        # Ensure that the URL we&amp;#x27;re connecting to is properly encoded\n        if url.startswith(&amp;quot;/&amp;quot;):\n            url = six.ensure_str(_encode_target(url))\n        else:\n            url = six.ensure_str(parsed_url.url)\n    \n        conn = None\n    \n        # Track whether `conn` needs to be released before\n        # returning/raising/recursing. Update this variable if necessary, and\n        # leave `release_conn` constant throughout the function. That way, if\n        # the function recurses, the original value of `release_conn` will be\n        # passed down into the recursive call, and its value will be respected.\n        #\n        # See issue #651 [1] for details.\n        #\n        # [1] &amp;lt;https://github.com/urllib3/urllib3/issues/651&amp;gt;\n        release_this_conn = release_conn\n    \n        http_tunnel_required = connection_requires_http_tunnel(\n            self.proxy, self.proxy_config, destination_scheme\n        )\n    \n        # Merge the proxy headers. Only done when not using HTTP CONNECT. We\n        # have to copy the headers dict so we can safely change it without those\n        # changes being reflected in anyone else&amp;#x27;s copy.\n        if not http_tunnel_required:\n            headers = headers.copy()\n            headers.update(self.proxy_headers)\n    \n        # Must keep the exception bound to a separate variable or else Python 3\n        # complains about UnboundLocalError.\n        err = None\n    \n        # Keep track of whether we cleanly exited the except block. This\n        # ensures we do proper cleanup in finally.\n        clean_exit = False\n    \n        # Rewind body position, if needed. Record current position\n        # for future rewinds in the event of a redirect/retry.\n        body_pos = set_file_position(body, body_pos)\n    \n        try:\n            # Request a connection from the queue.\n            timeout_obj = self._get_timeout(timeout)\n            conn = self._get_conn(timeout=pool_timeout)\n    \n            conn.timeout = timeout_obj.connect_timeout\n    \n            is_new_proxy_conn = self.proxy is not None and not getattr(\n                conn, &amp;quot;sock&amp;quot;, None\n            )\n            if is_new_proxy_conn and http_tunnel_required:\n                self._prepare_proxy(conn)\n    \n            # Make the request on the httplib connection object.\n&amp;gt;           httplib_response = self._make_request(\n                conn,\n                method,\n                url,\n                timeout=timeout_obj,\n                body=body,\n                headers=headers,\n                chunked=chunked,\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:703: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:398: in _make_request\n    conn.request(method, url, **httplib_request_kw)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:239: in request\n    super(HTTPConnection, self).request(method, url, body=body, headers=headers)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1282: in request\n    self._send_request(method, url, body, headers, encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1328: in _send_request\n    self.endheaders(body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1277: in endheaders\n    self._send_output(message_body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1037: in _send_output\n    self.send(msg)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:975: in send\n    self.connect()\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:205: in connect\n    conn = self._new_conn()\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927823350&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n            conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n    \n        except SocketTimeout:\n            raise ConnectTimeoutError(\n                self,\n                &amp;quot;Connection to %s timed out. (connect timeout=%s)&amp;quot;\n                % (self.host, self.timeout),\n            )\n    \n        except SocketError as e:\n&amp;gt;           raise NewConnectionError(\n                self, &amp;quot;Failed to establish a new connection: %s&amp;quot; % e\n            )\nE           urllib3.exceptions.NewConnectionError: &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927823350&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:186: NewConnectionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927821C10&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n&amp;gt;               resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:489: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:787: in urlopen\n    retries = retries.increment(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = Retry(total=0, connect=None, read=False, redirect=None, status=None), method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, response = None\nerror = NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927823350&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;)\n_pool = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927823950&amp;gt;, _stacktrace = &amp;lt;traceback object at 0x0000023927822200&amp;gt;\n\n    def increment(\n        self,\n        method=None,\n        url=None,\n        response=None,\n        error=None,\n        _pool=None,\n        _stacktrace=None,\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Return a new Retry object with incremented retry counters.\n    \n        :param response: A response object, or None, if the server did not\n            return a response.\n        :type response: :class:`~urllib3.response.HTTPResponse`\n        :param Exception error: An error encountered during the request, or\n            None if the response was received successfully.\n    \n        :return: A new ``Retry`` object.\n        &amp;quot;&amp;quot;&amp;quot;\n        if self.total is False and error:\n            # Disabled, indicate to re-raise the error.\n            raise six.reraise(type(error), error, _stacktrace)\n    \n        total = self.total\n        if total is not None:\n            total -= 1\n    \n        connect = self.connect\n        read = self.read\n        redirect = self.redirect\n        status_count = self.status\n        other = self.other\n        cause = &amp;quot;unknown&amp;quot;\n        status = None\n        redirect_location = None\n    \n        if error and self._is_connection_error(error):\n            # Connect retry?\n            if connect is False:\n                raise six.reraise(type(error), error, _stacktrace)\n            elif connect is not None:\n                connect -= 1\n    \n        elif error and self._is_read_error(error):\n            # Read retry?\n            if read is False or not self._is_method_retryable(method):\n                raise six.reraise(type(error), error, _stacktrace)\n            elif read is not None:\n                read -= 1\n    \n        elif error:\n            # Other retry?\n            if other is not None:\n                other -= 1\n    \n        elif response and response.get_redirect_location():\n            # Redirect retry?\n            if redirect is not None:\n                redirect -= 1\n            cause = &amp;quot;too many redirects&amp;quot;\n            redirect_location = response.get_redirect_location()\n            status = response.status\n    \n        else:\n            # Incrementing because of a server error like a 500 in\n            # status_forcelist and the given method is in the allowed_methods\n            cause = ResponseError.GENERIC_ERROR\n            if response and response.status:\n                if status_count is not None:\n                    status_count -= 1\n                cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status)\n                status = response.status\n    \n        history = self.history + (\n            RequestHistory(method, url, error, status, redirect_location),\n        )\n    \n        new_retry = self.new(\n            total=total,\n            connect=connect,\n            read=read,\n            redirect=redirect,\n            status=status_count,\n            other=other,\n            history=history,\n        )\n    \n        if new_retry.is_exhausted():\n&amp;gt;           raise MaxRetryError(_pool, url, error or ResponseError(cause))\nE           urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927823350&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\retry.py:592: MaxRetryError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;scripts.test_ihrm_login.TestIhrmLogin object at 0x0000023927299F90&amp;gt;\n\n    def test12_more_params(self):\n        data = {&amp;quot;mobile&amp;quot;: &amp;quot;13800000002&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;123456&amp;quot;, &amp;quot;abc&amp;quot;: &amp;quot;123&amp;quot;}\n&amp;gt;       resp = IhrmLoginApi.login(data)\n\nscripts\\test_ihrm_login.py:120: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\napi\\ihrm_login_api.py:12: in login\n    resp = requests.post(url=&amp;quot;http://ihrm-test.itheima.net/api/sys/login&amp;quot;, json=req_data)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:115: in post\n    return request(&amp;quot;post&amp;quot;, url, data=data, json=json, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:59: in request\n    return session.request(method=method, url=url, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:587: in request\n    resp = self.send(prep, **send_kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:701: in send\n    r = adapter.send(request, **kwargs)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927821C10&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n                resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n    \n            # Send the request.\n            else:\n                if hasattr(conn, &amp;quot;proxy_pool&amp;quot;):\n                    conn = conn.proxy_pool\n    \n                low_conn = conn._get_conn(timeout=DEFAULT_POOL_TIMEOUT)\n    \n                try:\n                    skip_host = &amp;quot;Host&amp;quot; in request.headers\n                    low_conn.putrequest(\n                        request.method,\n                        url,\n                        skip_accept_encoding=True,\n                        skip_host=skip_host,\n                    )\n    \n                    for header, value in request.headers.items():\n                        low_conn.putheader(header, value)\n    \n                    low_conn.endheaders()\n    \n                    for i in request.body:\n                        low_conn.send(hex(len(i))[2:].encode(&amp;quot;utf-8&amp;quot;))\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                        low_conn.send(i)\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                    low_conn.send(b&amp;quot;0\\r\\n\\r\\n&amp;quot;)\n    \n                    # Receive the response from the server\n                    r = low_conn.getresponse()\n    \n                    resp = HTTPResponse.from_httplib(\n                        r,\n                        pool=conn,\n                        connection=low_conn,\n                        preload_content=False,\n                        decode_content=False,\n                    )\n                except Exception:\n                    # If we hit any problems here, clean up the connection.\n                    # Then, raise so that we can handle the actual exception.\n                    low_conn.close()\n                    raise\n    \n        except (ProtocolError, OSError) as err:\n            raise ConnectionError(err, request=request)\n    \n        except MaxRetryError as e:\n            if isinstance(e.reason, ConnectTimeoutError):\n                # TODO: Remove this in 3.0.0: see #2811\n                if not isinstance(e.reason, NewConnectionError):\n                    raise ConnectTimeout(e, request=request)\n    \n            if isinstance(e.reason, ResponseError):\n                raise RetryError(e, request=request)\n    \n            if isinstance(e.reason, _ProxyError):\n                raise ProxyError(e, request=request)\n    \n            if isinstance(e.reason, _SSLError):\n                # This branch is for urllib3 v1.22 and later.\n                raise SSLError(e, request=request)\n    \n&amp;gt;           raise ConnectionError(e, request=request)\nE           requests.exceptions.ConnectionError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927823350&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:565: ConnectionError\n\n------------------------------ Captured log call -------------------------------\nDEBUG    urllib3.connectionpool:connectionpool.py:228 Starting new HTTP connection (1): ihrm-test.itheima.net:80\n\n&#34;}], &#34;scripts/test_ihrm_login.py::TestIhrmLogin::test13_less_params&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Failed&#34;, &#34;testId&#34;: &#34;scripts/test_ihrm_login.py::TestIhrmLogin::test13_less_params&#34;, &#34;duration&#34;: &#34;47 ms&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Failed&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;scripts/test_ihrm_login.py::TestIhrmLogin::test13_less_params&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;47 ms&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;self = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927CC5F90&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n&amp;gt;           conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:174: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\connection.py:72: in create_connection\n    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nhost = &amp;#x27;ihrm-test.itheima.net&amp;#x27;, port = 80, family = &amp;lt;AddressFamily.AF_UNSPEC: 0&amp;gt;, type = &amp;lt;SocketKind.SOCK_STREAM: 1&amp;gt;, proto = 0, flags = 0\n\n    def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):\n        &amp;quot;&amp;quot;&amp;quot;Resolve host and port into list of address info entries.\n    \n        Translate the host/port argument into a sequence of 5-tuples that contain\n        all the necessary arguments for creating a socket connected to that service.\n        host is a domain name, a string representation of an IPv4/v6 address or\n        None. port is a string service name such as &amp;#x27;http&amp;#x27;, a numeric port number or\n        None. By passing None as the value of host and port, you can pass NULL to\n        the underlying C API.\n    \n        The family, type and proto arguments can be optionally specified in order to\n        narrow the list of addresses returned. Passing zero as a value for each of\n        these arguments selects the full range of results.\n        &amp;quot;&amp;quot;&amp;quot;\n        # We override this function since we want to translate the numeric family\n        # and socket type values to enum constants.\n        addrlist = []\n&amp;gt;       for res in _socket.getaddrinfo(host, port, family, type, proto, flags):\nE       socket.gaierror: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\socket.py:962: gaierror\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927CC7550&amp;gt;, method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, body = b&amp;#x27;{&amp;quot;mobile&amp;quot;: &amp;quot;13800000002&amp;quot;}&amp;#x27;\nheaders = {&amp;#x27;User-Agent&amp;#x27;: &amp;#x27;python-requests/2.28.1&amp;#x27;, &amp;#x27;Accept-Encoding&amp;#x27;: &amp;#x27;gzip, deflate&amp;#x27;, &amp;#x27;Accept&amp;#x27;: &amp;#x27;*/*&amp;#x27;, &amp;#x27;Connection&amp;#x27;: &amp;#x27;keep-alive&amp;#x27;, &amp;#x27;Content-Length&amp;#x27;: &amp;#x27;25&amp;#x27;, &amp;#x27;Content-Type&amp;#x27;: &amp;#x27;application/json&amp;#x27;}\nretries = Retry(total=0, connect=None, read=False, redirect=None, status=None), redirect = False, assert_same_host = False, timeout = Timeout(connect=None, read=None, total=None)\npool_timeout = None, release_conn = False, chunked = False, body_pos = None, response_kw = {&amp;#x27;decode_content&amp;#x27;: False, &amp;#x27;preload_content&amp;#x27;: False}\nparsed_url = Url(scheme=None, auth=None, host=None, port=None, path=&amp;#x27;/api/sys/login&amp;#x27;, query=None, fragment=None), destination_scheme = None, conn = None, release_this_conn = True\nhttp_tunnel_required = False, err = None, clean_exit = False\n\n    def urlopen(\n        self,\n        method,\n        url,\n        body=None,\n        headers=None,\n        retries=None,\n        redirect=True,\n        assert_same_host=True,\n        timeout=_Default,\n        pool_timeout=None,\n        release_conn=None,\n        chunked=False,\n        body_pos=None,\n        **response_kw\n    ):\n        &amp;quot;&amp;quot;&amp;quot;\n        Get a connection from the pool and perform an HTTP request. This is the\n        lowest level call for making a request, so you&amp;#x27;ll need to specify all\n        the raw details.\n    \n        .. note::\n    \n           More commonly, it&amp;#x27;s appropriate to use a convenience method provided\n           by :class:`.RequestMethods`, such as :meth:`request`.\n    \n        .. note::\n    \n           `release_conn` will only behave as expected if\n           `preload_content=False` because we want to make\n           `preload_content=False` the default behaviour someday soon without\n           breaking backwards compatibility.\n    \n        :param method:\n            HTTP request method (such as GET, POST, PUT, etc.)\n    \n        :param url:\n            The URL to perform the request on.\n    \n        :param body:\n            Data to send in the request body, either :class:`str`, :class:`bytes`,\n            an iterable of :class:`str`/:class:`bytes`, or a file-like object.\n    \n        :param headers:\n            Dictionary of custom headers to send, such as User-Agent,\n            If-None-Match, etc. If None, pool headers are used. If provided,\n            these headers completely replace any pool-specific headers.\n    \n        :param retries:\n            Configure the number of retries to allow before raising a\n            :class:`~urllib3.exceptions.MaxRetryError` exception.\n    \n            Pass ``None`` to retry until you receive a response. Pass a\n            :class:`~urllib3.util.retry.Retry` object for fine-grained control\n            over different types of retries.\n            Pass an integer number to retry connection errors that many times,\n            but no other types of errors. Pass zero to never retry.\n    \n            If ``False``, then retries are disabled and any exception is raised\n            immediately. Also, instead of raising a MaxRetryError on redirects,\n            the redirect response will be returned.\n    \n        :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.\n    \n        :param redirect:\n            If True, automatically handle redirects (status codes 301, 302,\n            303, 307, 308). Each redirect counts as a retry. Disabling retries\n            will disable redirect, too.\n    \n        :param assert_same_host:\n            If ``True``, will make sure that the host of the pool requests is\n            consistent else will raise HostChangedError. When ``False``, you can\n            use the pool on an HTTP proxy and request foreign hosts.\n    \n        :param timeout:\n            If specified, overrides the default timeout for this one\n            request. It may be a float (in seconds) or an instance of\n            :class:`urllib3.util.Timeout`.\n    \n        :param pool_timeout:\n            If set and the pool is set to block=True, then this method will\n            block for ``pool_timeout`` seconds and raise EmptyPoolError if no\n            connection is available within the time period.\n    \n        :param release_conn:\n            If False, then the urlopen call will not release the connection\n            back into the pool once a response is received (but will release if\n            you read the entire contents of the response such as when\n            `preload_content=True`). This is useful if you&amp;#x27;re not preloading\n            the response&amp;#x27;s content immediately. You will need to call\n            ``r.release_conn()`` on the response ``r`` to return the connection\n            back into the pool. If None, it takes the value of\n            ``response_kw.get(&amp;#x27;preload_content&amp;#x27;, True)``.\n    \n        :param chunked:\n            If True, urllib3 will send the body using chunked transfer\n            encoding. Otherwise, urllib3 will send the body using the standard\n            content-length form. Defaults to False.\n    \n        :param int body_pos:\n            Position to seek to in file-like body in the event of a retry or\n            redirect. Typically this won&amp;#x27;t need to be set because urllib3 will\n            auto-populate the value when needed.\n    \n        :param \\\\**response_kw:\n            Additional parameters are passed to\n            :meth:`urllib3.response.HTTPResponse.from_httplib`\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        parsed_url = parse_url(url)\n        destination_scheme = parsed_url.scheme\n    \n        if headers is None:\n            headers = self.headers\n    \n        if not isinstance(retries, Retry):\n            retries = Retry.from_int(retries, redirect=redirect, default=self.retries)\n    \n        if release_conn is None:\n            release_conn = response_kw.get(&amp;quot;preload_content&amp;quot;, True)\n    \n        # Check host\n        if assert_same_host and not self.is_same_host(url):\n            raise HostChangedError(self, url, retries)\n    \n        # Ensure that the URL we&amp;#x27;re connecting to is properly encoded\n        if url.startswith(&amp;quot;/&amp;quot;):\n            url = six.ensure_str(_encode_target(url))\n        else:\n            url = six.ensure_str(parsed_url.url)\n    \n        conn = None\n    \n        # Track whether `conn` needs to be released before\n        # returning/raising/recursing. Update this variable if necessary, and\n        # leave `release_conn` constant throughout the function. That way, if\n        # the function recurses, the original value of `release_conn` will be\n        # passed down into the recursive call, and its value will be respected.\n        #\n        # See issue #651 [1] for details.\n        #\n        # [1] &amp;lt;https://github.com/urllib3/urllib3/issues/651&amp;gt;\n        release_this_conn = release_conn\n    \n        http_tunnel_required = connection_requires_http_tunnel(\n            self.proxy, self.proxy_config, destination_scheme\n        )\n    \n        # Merge the proxy headers. Only done when not using HTTP CONNECT. We\n        # have to copy the headers dict so we can safely change it without those\n        # changes being reflected in anyone else&amp;#x27;s copy.\n        if not http_tunnel_required:\n            headers = headers.copy()\n            headers.update(self.proxy_headers)\n    \n        # Must keep the exception bound to a separate variable or else Python 3\n        # complains about UnboundLocalError.\n        err = None\n    \n        # Keep track of whether we cleanly exited the except block. This\n        # ensures we do proper cleanup in finally.\n        clean_exit = False\n    \n        # Rewind body position, if needed. Record current position\n        # for future rewinds in the event of a redirect/retry.\n        body_pos = set_file_position(body, body_pos)\n    \n        try:\n            # Request a connection from the queue.\n            timeout_obj = self._get_timeout(timeout)\n            conn = self._get_conn(timeout=pool_timeout)\n    \n            conn.timeout = timeout_obj.connect_timeout\n    \n            is_new_proxy_conn = self.proxy is not None and not getattr(\n                conn, &amp;quot;sock&amp;quot;, None\n            )\n            if is_new_proxy_conn and http_tunnel_required:\n                self._prepare_proxy(conn)\n    \n            # Make the request on the httplib connection object.\n&amp;gt;           httplib_response = self._make_request(\n                conn,\n                method,\n                url,\n                timeout=timeout_obj,\n                body=body,\n                headers=headers,\n                chunked=chunked,\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:703: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:398: in _make_request\n    conn.request(method, url, **httplib_request_kw)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:239: in request\n    super(HTTPConnection, self).request(method, url, body=body, headers=headers)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1282: in request\n    self._send_request(method, url, body, headers, encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1328: in _send_request\n    self.endheaders(body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1277: in endheaders\n    self._send_output(message_body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1037: in _send_output\n    self.send(msg)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:975: in send\n    self.connect()\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:205: in connect\n    conn = self._new_conn()\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927CC5F90&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n            conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n    \n        except SocketTimeout:\n            raise ConnectTimeoutError(\n                self,\n                &amp;quot;Connection to %s timed out. (connect timeout=%s)&amp;quot;\n                % (self.host, self.timeout),\n            )\n    \n        except SocketError as e:\n&amp;gt;           raise NewConnectionError(\n                self, &amp;quot;Failed to establish a new connection: %s&amp;quot; % e\n            )\nE           urllib3.exceptions.NewConnectionError: &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927CC5F90&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:186: NewConnectionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927CC5310&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n&amp;gt;               resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:489: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:787: in urlopen\n    retries = retries.increment(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = Retry(total=0, connect=None, read=False, redirect=None, status=None), method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, response = None\nerror = NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927CC5F90&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;)\n_pool = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927CC7550&amp;gt;, _stacktrace = &amp;lt;traceback object at 0x0000023927AC5A40&amp;gt;\n\n    def increment(\n        self,\n        method=None,\n        url=None,\n        response=None,\n        error=None,\n        _pool=None,\n        _stacktrace=None,\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Return a new Retry object with incremented retry counters.\n    \n        :param response: A response object, or None, if the server did not\n            return a response.\n        :type response: :class:`~urllib3.response.HTTPResponse`\n        :param Exception error: An error encountered during the request, or\n            None if the response was received successfully.\n    \n        :return: A new ``Retry`` object.\n        &amp;quot;&amp;quot;&amp;quot;\n        if self.total is False and error:\n            # Disabled, indicate to re-raise the error.\n            raise six.reraise(type(error), error, _stacktrace)\n    \n        total = self.total\n        if total is not None:\n            total -= 1\n    \n        connect = self.connect\n        read = self.read\n        redirect = self.redirect\n        status_count = self.status\n        other = self.other\n        cause = &amp;quot;unknown&amp;quot;\n        status = None\n        redirect_location = None\n    \n        if error and self._is_connection_error(error):\n            # Connect retry?\n            if connect is False:\n                raise six.reraise(type(error), error, _stacktrace)\n            elif connect is not None:\n                connect -= 1\n    \n        elif error and self._is_read_error(error):\n            # Read retry?\n            if read is False or not self._is_method_retryable(method):\n                raise six.reraise(type(error), error, _stacktrace)\n            elif read is not None:\n                read -= 1\n    \n        elif error:\n            # Other retry?\n            if other is not None:\n                other -= 1\n    \n        elif response and response.get_redirect_location():\n            # Redirect retry?\n            if redirect is not None:\n                redirect -= 1\n            cause = &amp;quot;too many redirects&amp;quot;\n            redirect_location = response.get_redirect_location()\n            status = response.status\n    \n        else:\n            # Incrementing because of a server error like a 500 in\n            # status_forcelist and the given method is in the allowed_methods\n            cause = ResponseError.GENERIC_ERROR\n            if response and response.status:\n                if status_count is not None:\n                    status_count -= 1\n                cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status)\n                status = response.status\n    \n        history = self.history + (\n            RequestHistory(method, url, error, status, redirect_location),\n        )\n    \n        new_retry = self.new(\n            total=total,\n            connect=connect,\n            read=read,\n            redirect=redirect,\n            status=status_count,\n            other=other,\n            history=history,\n        )\n    \n        if new_retry.is_exhausted():\n&amp;gt;           raise MaxRetryError(_pool, url, error or ResponseError(cause))\nE           urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927CC5F90&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\retry.py:592: MaxRetryError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;scripts.test_ihrm_login.TestIhrmLogin object at 0x000002392729A590&amp;gt;\n\n    def test13_less_params(self):\n        data = {&amp;quot;mobile&amp;quot;: &amp;quot;13800000002&amp;quot;}\n&amp;gt;       resp = IhrmLoginApi.login(data)\n\nscripts\\test_ihrm_login.py:126: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\napi\\ihrm_login_api.py:12: in login\n    resp = requests.post(url=&amp;quot;http://ihrm-test.itheima.net/api/sys/login&amp;quot;, json=req_data)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:115: in post\n    return request(&amp;quot;post&amp;quot;, url, data=data, json=json, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:59: in request\n    return session.request(method=method, url=url, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:587: in request\n    resp = self.send(prep, **send_kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:701: in send\n    r = adapter.send(request, **kwargs)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927CC5310&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n                resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n    \n            # Send the request.\n            else:\n                if hasattr(conn, &amp;quot;proxy_pool&amp;quot;):\n                    conn = conn.proxy_pool\n    \n                low_conn = conn._get_conn(timeout=DEFAULT_POOL_TIMEOUT)\n    \n                try:\n                    skip_host = &amp;quot;Host&amp;quot; in request.headers\n                    low_conn.putrequest(\n                        request.method,\n                        url,\n                        skip_accept_encoding=True,\n                        skip_host=skip_host,\n                    )\n    \n                    for header, value in request.headers.items():\n                        low_conn.putheader(header, value)\n    \n                    low_conn.endheaders()\n    \n                    for i in request.body:\n                        low_conn.send(hex(len(i))[2:].encode(&amp;quot;utf-8&amp;quot;))\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                        low_conn.send(i)\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                    low_conn.send(b&amp;quot;0\\r\\n\\r\\n&amp;quot;)\n    \n                    # Receive the response from the server\n                    r = low_conn.getresponse()\n    \n                    resp = HTTPResponse.from_httplib(\n                        r,\n                        pool=conn,\n                        connection=low_conn,\n                        preload_content=False,\n                        decode_content=False,\n                    )\n                except Exception:\n                    # If we hit any problems here, clean up the connection.\n                    # Then, raise so that we can handle the actual exception.\n                    low_conn.close()\n                    raise\n    \n        except (ProtocolError, OSError) as err:\n            raise ConnectionError(err, request=request)\n    \n        except MaxRetryError as e:\n            if isinstance(e.reason, ConnectTimeoutError):\n                # TODO: Remove this in 3.0.0: see #2811\n                if not isinstance(e.reason, NewConnectionError):\n                    raise ConnectTimeout(e, request=request)\n    \n            if isinstance(e.reason, ResponseError):\n                raise RetryError(e, request=request)\n    \n            if isinstance(e.reason, _ProxyError):\n                raise ProxyError(e, request=request)\n    \n            if isinstance(e.reason, _SSLError):\n                # This branch is for urllib3 v1.22 and later.\n                raise SSLError(e, request=request)\n    \n&amp;gt;           raise ConnectionError(e, request=request)\nE           requests.exceptions.ConnectionError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927CC5F90&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:565: ConnectionError\n\n------------------------------ Captured log call -------------------------------\nDEBUG    urllib3.connectionpool:connectionpool.py:228 Starting new HTTP connection (1): ihrm-test.itheima.net:80\n\n&#34;}], &#34;scripts/test_ihrm_login.py::TestIhrmLogin::test14_none_params&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Failed&#34;, &#34;testId&#34;: &#34;scripts/test_ihrm_login.py::TestIhrmLogin::test14_none_params&#34;, &#34;duration&#34;: &#34;39 ms&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Failed&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;scripts/test_ihrm_login.py::TestIhrmLogin::test14_none_params&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;39 ms&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;self = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927C4B250&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n&amp;gt;           conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:174: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\connection.py:72: in create_connection\n    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nhost = &amp;#x27;ihrm-test.itheima.net&amp;#x27;, port = 80, family = &amp;lt;AddressFamily.AF_UNSPEC: 0&amp;gt;, type = &amp;lt;SocketKind.SOCK_STREAM: 1&amp;gt;, proto = 0, flags = 0\n\n    def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):\n        &amp;quot;&amp;quot;&amp;quot;Resolve host and port into list of address info entries.\n    \n        Translate the host/port argument into a sequence of 5-tuples that contain\n        all the necessary arguments for creating a socket connected to that service.\n        host is a domain name, a string representation of an IPv4/v6 address or\n        None. port is a string service name such as &amp;#x27;http&amp;#x27;, a numeric port number or\n        None. By passing None as the value of host and port, you can pass NULL to\n        the underlying C API.\n    \n        The family, type and proto arguments can be optionally specified in order to\n        narrow the list of addresses returned. Passing zero as a value for each of\n        these arguments selects the full range of results.\n        &amp;quot;&amp;quot;&amp;quot;\n        # We override this function since we want to translate the numeric family\n        # and socket type values to enum constants.\n        addrlist = []\n&amp;gt;       for res in _socket.getaddrinfo(host, port, family, type, proto, flags):\nE       socket.gaierror: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\socket.py:962: gaierror\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927C4A910&amp;gt;, method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, body = None\nheaders = {&amp;#x27;User-Agent&amp;#x27;: &amp;#x27;python-requests/2.28.1&amp;#x27;, &amp;#x27;Accept-Encoding&amp;#x27;: &amp;#x27;gzip, deflate&amp;#x27;, &amp;#x27;Accept&amp;#x27;: &amp;#x27;*/*&amp;#x27;, &amp;#x27;Connection&amp;#x27;: &amp;#x27;keep-alive&amp;#x27;, &amp;#x27;Content-Length&amp;#x27;: &amp;#x27;0&amp;#x27;}\nretries = Retry(total=0, connect=None, read=False, redirect=None, status=None), redirect = False, assert_same_host = False, timeout = Timeout(connect=None, read=None, total=None)\npool_timeout = None, release_conn = False, chunked = False, body_pos = None, response_kw = {&amp;#x27;decode_content&amp;#x27;: False, &amp;#x27;preload_content&amp;#x27;: False}\nparsed_url = Url(scheme=None, auth=None, host=None, port=None, path=&amp;#x27;/api/sys/login&amp;#x27;, query=None, fragment=None), destination_scheme = None, conn = None, release_this_conn = True\nhttp_tunnel_required = False, err = None, clean_exit = False\n\n    def urlopen(\n        self,\n        method,\n        url,\n        body=None,\n        headers=None,\n        retries=None,\n        redirect=True,\n        assert_same_host=True,\n        timeout=_Default,\n        pool_timeout=None,\n        release_conn=None,\n        chunked=False,\n        body_pos=None,\n        **response_kw\n    ):\n        &amp;quot;&amp;quot;&amp;quot;\n        Get a connection from the pool and perform an HTTP request. This is the\n        lowest level call for making a request, so you&amp;#x27;ll need to specify all\n        the raw details.\n    \n        .. note::\n    \n           More commonly, it&amp;#x27;s appropriate to use a convenience method provided\n           by :class:`.RequestMethods`, such as :meth:`request`.\n    \n        .. note::\n    \n           `release_conn` will only behave as expected if\n           `preload_content=False` because we want to make\n           `preload_content=False` the default behaviour someday soon without\n           breaking backwards compatibility.\n    \n        :param method:\n            HTTP request method (such as GET, POST, PUT, etc.)\n    \n        :param url:\n            The URL to perform the request on.\n    \n        :param body:\n            Data to send in the request body, either :class:`str`, :class:`bytes`,\n            an iterable of :class:`str`/:class:`bytes`, or a file-like object.\n    \n        :param headers:\n            Dictionary of custom headers to send, such as User-Agent,\n            If-None-Match, etc. If None, pool headers are used. If provided,\n            these headers completely replace any pool-specific headers.\n    \n        :param retries:\n            Configure the number of retries to allow before raising a\n            :class:`~urllib3.exceptions.MaxRetryError` exception.\n    \n            Pass ``None`` to retry until you receive a response. Pass a\n            :class:`~urllib3.util.retry.Retry` object for fine-grained control\n            over different types of retries.\n            Pass an integer number to retry connection errors that many times,\n            but no other types of errors. Pass zero to never retry.\n    \n            If ``False``, then retries are disabled and any exception is raised\n            immediately. Also, instead of raising a MaxRetryError on redirects,\n            the redirect response will be returned.\n    \n        :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.\n    \n        :param redirect:\n            If True, automatically handle redirects (status codes 301, 302,\n            303, 307, 308). Each redirect counts as a retry. Disabling retries\n            will disable redirect, too.\n    \n        :param assert_same_host:\n            If ``True``, will make sure that the host of the pool requests is\n            consistent else will raise HostChangedError. When ``False``, you can\n            use the pool on an HTTP proxy and request foreign hosts.\n    \n        :param timeout:\n            If specified, overrides the default timeout for this one\n            request. It may be a float (in seconds) or an instance of\n            :class:`urllib3.util.Timeout`.\n    \n        :param pool_timeout:\n            If set and the pool is set to block=True, then this method will\n            block for ``pool_timeout`` seconds and raise EmptyPoolError if no\n            connection is available within the time period.\n    \n        :param release_conn:\n            If False, then the urlopen call will not release the connection\n            back into the pool once a response is received (but will release if\n            you read the entire contents of the response such as when\n            `preload_content=True`). This is useful if you&amp;#x27;re not preloading\n            the response&amp;#x27;s content immediately. You will need to call\n            ``r.release_conn()`` on the response ``r`` to return the connection\n            back into the pool. If None, it takes the value of\n            ``response_kw.get(&amp;#x27;preload_content&amp;#x27;, True)``.\n    \n        :param chunked:\n            If True, urllib3 will send the body using chunked transfer\n            encoding. Otherwise, urllib3 will send the body using the standard\n            content-length form. Defaults to False.\n    \n        :param int body_pos:\n            Position to seek to in file-like body in the event of a retry or\n            redirect. Typically this won&amp;#x27;t need to be set because urllib3 will\n            auto-populate the value when needed.\n    \n        :param \\\\**response_kw:\n            Additional parameters are passed to\n            :meth:`urllib3.response.HTTPResponse.from_httplib`\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        parsed_url = parse_url(url)\n        destination_scheme = parsed_url.scheme\n    \n        if headers is None:\n            headers = self.headers\n    \n        if not isinstance(retries, Retry):\n            retries = Retry.from_int(retries, redirect=redirect, default=self.retries)\n    \n        if release_conn is None:\n            release_conn = response_kw.get(&amp;quot;preload_content&amp;quot;, True)\n    \n        # Check host\n        if assert_same_host and not self.is_same_host(url):\n            raise HostChangedError(self, url, retries)\n    \n        # Ensure that the URL we&amp;#x27;re connecting to is properly encoded\n        if url.startswith(&amp;quot;/&amp;quot;):\n            url = six.ensure_str(_encode_target(url))\n        else:\n            url = six.ensure_str(parsed_url.url)\n    \n        conn = None\n    \n        # Track whether `conn` needs to be released before\n        # returning/raising/recursing. Update this variable if necessary, and\n        # leave `release_conn` constant throughout the function. That way, if\n        # the function recurses, the original value of `release_conn` will be\n        # passed down into the recursive call, and its value will be respected.\n        #\n        # See issue #651 [1] for details.\n        #\n        # [1] &amp;lt;https://github.com/urllib3/urllib3/issues/651&amp;gt;\n        release_this_conn = release_conn\n    \n        http_tunnel_required = connection_requires_http_tunnel(\n            self.proxy, self.proxy_config, destination_scheme\n        )\n    \n        # Merge the proxy headers. Only done when not using HTTP CONNECT. We\n        # have to copy the headers dict so we can safely change it without those\n        # changes being reflected in anyone else&amp;#x27;s copy.\n        if not http_tunnel_required:\n            headers = headers.copy()\n            headers.update(self.proxy_headers)\n    \n        # Must keep the exception bound to a separate variable or else Python 3\n        # complains about UnboundLocalError.\n        err = None\n    \n        # Keep track of whether we cleanly exited the except block. This\n        # ensures we do proper cleanup in finally.\n        clean_exit = False\n    \n        # Rewind body position, if needed. Record current position\n        # for future rewinds in the event of a redirect/retry.\n        body_pos = set_file_position(body, body_pos)\n    \n        try:\n            # Request a connection from the queue.\n            timeout_obj = self._get_timeout(timeout)\n            conn = self._get_conn(timeout=pool_timeout)\n    \n            conn.timeout = timeout_obj.connect_timeout\n    \n            is_new_proxy_conn = self.proxy is not None and not getattr(\n                conn, &amp;quot;sock&amp;quot;, None\n            )\n            if is_new_proxy_conn and http_tunnel_required:\n                self._prepare_proxy(conn)\n    \n            # Make the request on the httplib connection object.\n&amp;gt;           httplib_response = self._make_request(\n                conn,\n                method,\n                url,\n                timeout=timeout_obj,\n                body=body,\n                headers=headers,\n                chunked=chunked,\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:703: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:398: in _make_request\n    conn.request(method, url, **httplib_request_kw)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:239: in request\n    super(HTTPConnection, self).request(method, url, body=body, headers=headers)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1282: in request\n    self._send_request(method, url, body, headers, encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1328: in _send_request\n    self.endheaders(body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1277: in endheaders\n    self._send_output(message_body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1037: in _send_output\n    self.send(msg)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:975: in send\n    self.connect()\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:205: in connect\n    conn = self._new_conn()\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927C4B250&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n            conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n    \n        except SocketTimeout:\n            raise ConnectTimeoutError(\n                self,\n                &amp;quot;Connection to %s timed out. (connect timeout=%s)&amp;quot;\n                % (self.host, self.timeout),\n            )\n    \n        except SocketError as e:\n&amp;gt;           raise NewConnectionError(\n                self, &amp;quot;Failed to establish a new connection: %s&amp;quot; % e\n            )\nE           urllib3.exceptions.NewConnectionError: &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927C4B250&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:186: NewConnectionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927C4B890&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n&amp;gt;               resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:489: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:787: in urlopen\n    retries = retries.increment(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = Retry(total=0, connect=None, read=False, redirect=None, status=None), method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, response = None\nerror = NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927C4B250&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;)\n_pool = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927C4A910&amp;gt;, _stacktrace = &amp;lt;traceback object at 0x0000023927816140&amp;gt;\n\n    def increment(\n        self,\n        method=None,\n        url=None,\n        response=None,\n        error=None,\n        _pool=None,\n        _stacktrace=None,\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Return a new Retry object with incremented retry counters.\n    \n        :param response: A response object, or None, if the server did not\n            return a response.\n        :type response: :class:`~urllib3.response.HTTPResponse`\n        :param Exception error: An error encountered during the request, or\n            None if the response was received successfully.\n    \n        :return: A new ``Retry`` object.\n        &amp;quot;&amp;quot;&amp;quot;\n        if self.total is False and error:\n            # Disabled, indicate to re-raise the error.\n            raise six.reraise(type(error), error, _stacktrace)\n    \n        total = self.total\n        if total is not None:\n            total -= 1\n    \n        connect = self.connect\n        read = self.read\n        redirect = self.redirect\n        status_count = self.status\n        other = self.other\n        cause = &amp;quot;unknown&amp;quot;\n        status = None\n        redirect_location = None\n    \n        if error and self._is_connection_error(error):\n            # Connect retry?\n            if connect is False:\n                raise six.reraise(type(error), error, _stacktrace)\n            elif connect is not None:\n                connect -= 1\n    \n        elif error and self._is_read_error(error):\n            # Read retry?\n            if read is False or not self._is_method_retryable(method):\n                raise six.reraise(type(error), error, _stacktrace)\n            elif read is not None:\n                read -= 1\n    \n        elif error:\n            # Other retry?\n            if other is not None:\n                other -= 1\n    \n        elif response and response.get_redirect_location():\n            # Redirect retry?\n            if redirect is not None:\n                redirect -= 1\n            cause = &amp;quot;too many redirects&amp;quot;\n            redirect_location = response.get_redirect_location()\n            status = response.status\n    \n        else:\n            # Incrementing because of a server error like a 500 in\n            # status_forcelist and the given method is in the allowed_methods\n            cause = ResponseError.GENERIC_ERROR\n            if response and response.status:\n                if status_count is not None:\n                    status_count -= 1\n                cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status)\n                status = response.status\n    \n        history = self.history + (\n            RequestHistory(method, url, error, status, redirect_location),\n        )\n    \n        new_retry = self.new(\n            total=total,\n            connect=connect,\n            read=read,\n            redirect=redirect,\n            status=status_count,\n            other=other,\n            history=history,\n        )\n    \n        if new_retry.is_exhausted():\n&amp;gt;           raise MaxRetryError(_pool, url, error or ResponseError(cause))\nE           urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927C4B250&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\retry.py:592: MaxRetryError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;scripts.test_ihrm_login.TestIhrmLogin object at 0x000002392729AB90&amp;gt;\n\n    def test14_none_params(self):\n        data = None\n&amp;gt;       resp = IhrmLoginApi.login(data)\n\nscripts\\test_ihrm_login.py:132: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\napi\\ihrm_login_api.py:12: in login\n    resp = requests.post(url=&amp;quot;http://ihrm-test.itheima.net/api/sys/login&amp;quot;, json=req_data)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:115: in post\n    return request(&amp;quot;post&amp;quot;, url, data=data, json=json, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:59: in request\n    return session.request(method=method, url=url, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:587: in request\n    resp = self.send(prep, **send_kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:701: in send\n    r = adapter.send(request, **kwargs)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927C4B890&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n                resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n    \n            # Send the request.\n            else:\n                if hasattr(conn, &amp;quot;proxy_pool&amp;quot;):\n                    conn = conn.proxy_pool\n    \n                low_conn = conn._get_conn(timeout=DEFAULT_POOL_TIMEOUT)\n    \n                try:\n                    skip_host = &amp;quot;Host&amp;quot; in request.headers\n                    low_conn.putrequest(\n                        request.method,\n                        url,\n                        skip_accept_encoding=True,\n                        skip_host=skip_host,\n                    )\n    \n                    for header, value in request.headers.items():\n                        low_conn.putheader(header, value)\n    \n                    low_conn.endheaders()\n    \n                    for i in request.body:\n                        low_conn.send(hex(len(i))[2:].encode(&amp;quot;utf-8&amp;quot;))\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                        low_conn.send(i)\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                    low_conn.send(b&amp;quot;0\\r\\n\\r\\n&amp;quot;)\n    \n                    # Receive the response from the server\n                    r = low_conn.getresponse()\n    \n                    resp = HTTPResponse.from_httplib(\n                        r,\n                        pool=conn,\n                        connection=low_conn,\n                        preload_content=False,\n                        decode_content=False,\n                    )\n                except Exception:\n                    # If we hit any problems here, clean up the connection.\n                    # Then, raise so that we can handle the actual exception.\n                    low_conn.close()\n                    raise\n    \n        except (ProtocolError, OSError) as err:\n            raise ConnectionError(err, request=request)\n    \n        except MaxRetryError as e:\n            if isinstance(e.reason, ConnectTimeoutError):\n                # TODO: Remove this in 3.0.0: see #2811\n                if not isinstance(e.reason, NewConnectionError):\n                    raise ConnectTimeout(e, request=request)\n    \n            if isinstance(e.reason, ResponseError):\n                raise RetryError(e, request=request)\n    \n            if isinstance(e.reason, _ProxyError):\n                raise ProxyError(e, request=request)\n    \n            if isinstance(e.reason, _SSLError):\n                # This branch is for urllib3 v1.22 and later.\n                raise SSLError(e, request=request)\n    \n&amp;gt;           raise ConnectionError(e, request=request)\nE           requests.exceptions.ConnectionError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927C4B250&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:565: ConnectionError\n\n------------------------------ Captured log call -------------------------------\nDEBUG    urllib3.connectionpool:connectionpool.py:228 Starting new HTTP connection (1): ihrm-test.itheima.net:80\n\n&#34;}], &#34;scripts/test_ihrm_login.py::TestIhrmLogin::test15_err_parames&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Failed&#34;, &#34;testId&#34;: &#34;scripts/test_ihrm_login.py::TestIhrmLogin::test15_err_parames&#34;, &#34;duration&#34;: &#34;48 ms&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Failed&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;scripts/test_ihrm_login.py::TestIhrmLogin::test15_err_parames&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;48 ms&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;self = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927E02AD0&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n&amp;gt;           conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:174: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\connection.py:72: in create_connection\n    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nhost = &amp;#x27;ihrm-test.itheima.net&amp;#x27;, port = 80, family = &amp;lt;AddressFamily.AF_UNSPEC: 0&amp;gt;, type = &amp;lt;SocketKind.SOCK_STREAM: 1&amp;gt;, proto = 0, flags = 0\n\n    def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):\n        &amp;quot;&amp;quot;&amp;quot;Resolve host and port into list of address info entries.\n    \n        Translate the host/port argument into a sequence of 5-tuples that contain\n        all the necessary arguments for creating a socket connected to that service.\n        host is a domain name, a string representation of an IPv4/v6 address or\n        None. port is a string service name such as &amp;#x27;http&amp;#x27;, a numeric port number or\n        None. By passing None as the value of host and port, you can pass NULL to\n        the underlying C API.\n    \n        The family, type and proto arguments can be optionally specified in order to\n        narrow the list of addresses returned. Passing zero as a value for each of\n        these arguments selects the full range of results.\n        &amp;quot;&amp;quot;&amp;quot;\n        # We override this function since we want to translate the numeric family\n        # and socket type values to enum constants.\n        addrlist = []\n&amp;gt;       for res in _socket.getaddrinfo(host, port, family, type, proto, flags):\nE       socket.gaierror: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\socket.py:962: gaierror\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927E00B90&amp;gt;, method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, body = b&amp;#x27;{&amp;quot;abc&amp;quot;: &amp;quot;13800000002&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;123456&amp;quot;}&amp;#x27;\nheaders = {&amp;#x27;User-Agent&amp;#x27;: &amp;#x27;python-requests/2.28.1&amp;#x27;, &amp;#x27;Accept-Encoding&amp;#x27;: &amp;#x27;gzip, deflate&amp;#x27;, &amp;#x27;Accept&amp;#x27;: &amp;#x27;*/*&amp;#x27;, &amp;#x27;Connection&amp;#x27;: &amp;#x27;keep-alive&amp;#x27;, &amp;#x27;Content-Length&amp;#x27;: &amp;#x27;44&amp;#x27;, &amp;#x27;Content-Type&amp;#x27;: &amp;#x27;application/json&amp;#x27;}\nretries = Retry(total=0, connect=None, read=False, redirect=None, status=None), redirect = False, assert_same_host = False, timeout = Timeout(connect=None, read=None, total=None)\npool_timeout = None, release_conn = False, chunked = False, body_pos = None, response_kw = {&amp;#x27;decode_content&amp;#x27;: False, &amp;#x27;preload_content&amp;#x27;: False}\nparsed_url = Url(scheme=None, auth=None, host=None, port=None, path=&amp;#x27;/api/sys/login&amp;#x27;, query=None, fragment=None), destination_scheme = None, conn = None, release_this_conn = True\nhttp_tunnel_required = False, err = None, clean_exit = False\n\n    def urlopen(\n        self,\n        method,\n        url,\n        body=None,\n        headers=None,\n        retries=None,\n        redirect=True,\n        assert_same_host=True,\n        timeout=_Default,\n        pool_timeout=None,\n        release_conn=None,\n        chunked=False,\n        body_pos=None,\n        **response_kw\n    ):\n        &amp;quot;&amp;quot;&amp;quot;\n        Get a connection from the pool and perform an HTTP request. This is the\n        lowest level call for making a request, so you&amp;#x27;ll need to specify all\n        the raw details.\n    \n        .. note::\n    \n           More commonly, it&amp;#x27;s appropriate to use a convenience method provided\n           by :class:`.RequestMethods`, such as :meth:`request`.\n    \n        .. note::\n    \n           `release_conn` will only behave as expected if\n           `preload_content=False` because we want to make\n           `preload_content=False` the default behaviour someday soon without\n           breaking backwards compatibility.\n    \n        :param method:\n            HTTP request method (such as GET, POST, PUT, etc.)\n    \n        :param url:\n            The URL to perform the request on.\n    \n        :param body:\n            Data to send in the request body, either :class:`str`, :class:`bytes`,\n            an iterable of :class:`str`/:class:`bytes`, or a file-like object.\n    \n        :param headers:\n            Dictionary of custom headers to send, such as User-Agent,\n            If-None-Match, etc. If None, pool headers are used. If provided,\n            these headers completely replace any pool-specific headers.\n    \n        :param retries:\n            Configure the number of retries to allow before raising a\n            :class:`~urllib3.exceptions.MaxRetryError` exception.\n    \n            Pass ``None`` to retry until you receive a response. Pass a\n            :class:`~urllib3.util.retry.Retry` object for fine-grained control\n            over different types of retries.\n            Pass an integer number to retry connection errors that many times,\n            but no other types of errors. Pass zero to never retry.\n    \n            If ``False``, then retries are disabled and any exception is raised\n            immediately. Also, instead of raising a MaxRetryError on redirects,\n            the redirect response will be returned.\n    \n        :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.\n    \n        :param redirect:\n            If True, automatically handle redirects (status codes 301, 302,\n            303, 307, 308). Each redirect counts as a retry. Disabling retries\n            will disable redirect, too.\n    \n        :param assert_same_host:\n            If ``True``, will make sure that the host of the pool requests is\n            consistent else will raise HostChangedError. When ``False``, you can\n            use the pool on an HTTP proxy and request foreign hosts.\n    \n        :param timeout:\n            If specified, overrides the default timeout for this one\n            request. It may be a float (in seconds) or an instance of\n            :class:`urllib3.util.Timeout`.\n    \n        :param pool_timeout:\n            If set and the pool is set to block=True, then this method will\n            block for ``pool_timeout`` seconds and raise EmptyPoolError if no\n            connection is available within the time period.\n    \n        :param release_conn:\n            If False, then the urlopen call will not release the connection\n            back into the pool once a response is received (but will release if\n            you read the entire contents of the response such as when\n            `preload_content=True`). This is useful if you&amp;#x27;re not preloading\n            the response&amp;#x27;s content immediately. You will need to call\n            ``r.release_conn()`` on the response ``r`` to return the connection\n            back into the pool. If None, it takes the value of\n            ``response_kw.get(&amp;#x27;preload_content&amp;#x27;, True)``.\n    \n        :param chunked:\n            If True, urllib3 will send the body using chunked transfer\n            encoding. Otherwise, urllib3 will send the body using the standard\n            content-length form. Defaults to False.\n    \n        :param int body_pos:\n            Position to seek to in file-like body in the event of a retry or\n            redirect. Typically this won&amp;#x27;t need to be set because urllib3 will\n            auto-populate the value when needed.\n    \n        :param \\\\**response_kw:\n            Additional parameters are passed to\n            :meth:`urllib3.response.HTTPResponse.from_httplib`\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        parsed_url = parse_url(url)\n        destination_scheme = parsed_url.scheme\n    \n        if headers is None:\n            headers = self.headers\n    \n        if not isinstance(retries, Retry):\n            retries = Retry.from_int(retries, redirect=redirect, default=self.retries)\n    \n        if release_conn is None:\n            release_conn = response_kw.get(&amp;quot;preload_content&amp;quot;, True)\n    \n        # Check host\n        if assert_same_host and not self.is_same_host(url):\n            raise HostChangedError(self, url, retries)\n    \n        # Ensure that the URL we&amp;#x27;re connecting to is properly encoded\n        if url.startswith(&amp;quot;/&amp;quot;):\n            url = six.ensure_str(_encode_target(url))\n        else:\n            url = six.ensure_str(parsed_url.url)\n    \n        conn = None\n    \n        # Track whether `conn` needs to be released before\n        # returning/raising/recursing. Update this variable if necessary, and\n        # leave `release_conn` constant throughout the function. That way, if\n        # the function recurses, the original value of `release_conn` will be\n        # passed down into the recursive call, and its value will be respected.\n        #\n        # See issue #651 [1] for details.\n        #\n        # [1] &amp;lt;https://github.com/urllib3/urllib3/issues/651&amp;gt;\n        release_this_conn = release_conn\n    \n        http_tunnel_required = connection_requires_http_tunnel(\n            self.proxy, self.proxy_config, destination_scheme\n        )\n    \n        # Merge the proxy headers. Only done when not using HTTP CONNECT. We\n        # have to copy the headers dict so we can safely change it without those\n        # changes being reflected in anyone else&amp;#x27;s copy.\n        if not http_tunnel_required:\n            headers = headers.copy()\n            headers.update(self.proxy_headers)\n    \n        # Must keep the exception bound to a separate variable or else Python 3\n        # complains about UnboundLocalError.\n        err = None\n    \n        # Keep track of whether we cleanly exited the except block. This\n        # ensures we do proper cleanup in finally.\n        clean_exit = False\n    \n        # Rewind body position, if needed. Record current position\n        # for future rewinds in the event of a redirect/retry.\n        body_pos = set_file_position(body, body_pos)\n    \n        try:\n            # Request a connection from the queue.\n            timeout_obj = self._get_timeout(timeout)\n            conn = self._get_conn(timeout=pool_timeout)\n    \n            conn.timeout = timeout_obj.connect_timeout\n    \n            is_new_proxy_conn = self.proxy is not None and not getattr(\n                conn, &amp;quot;sock&amp;quot;, None\n            )\n            if is_new_proxy_conn and http_tunnel_required:\n                self._prepare_proxy(conn)\n    \n            # Make the request on the httplib connection object.\n&amp;gt;           httplib_response = self._make_request(\n                conn,\n                method,\n                url,\n                timeout=timeout_obj,\n                body=body,\n                headers=headers,\n                chunked=chunked,\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:703: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:398: in _make_request\n    conn.request(method, url, **httplib_request_kw)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:239: in request\n    super(HTTPConnection, self).request(method, url, body=body, headers=headers)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1282: in request\n    self._send_request(method, url, body, headers, encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1328: in _send_request\n    self.endheaders(body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1277: in endheaders\n    self._send_output(message_body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1037: in _send_output\n    self.send(msg)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:975: in send\n    self.connect()\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:205: in connect\n    conn = self._new_conn()\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927E02AD0&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n            conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n    \n        except SocketTimeout:\n            raise ConnectTimeoutError(\n                self,\n                &amp;quot;Connection to %s timed out. (connect timeout=%s)&amp;quot;\n                % (self.host, self.timeout),\n            )\n    \n        except SocketError as e:\n&amp;gt;           raise NewConnectionError(\n                self, &amp;quot;Failed to establish a new connection: %s&amp;quot; % e\n            )\nE           urllib3.exceptions.NewConnectionError: &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927E02AD0&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:186: NewConnectionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927E028D0&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n&amp;gt;               resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:489: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:787: in urlopen\n    retries = retries.increment(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = Retry(total=0, connect=None, read=False, redirect=None, status=None), method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, response = None\nerror = NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927E02AD0&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;)\n_pool = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927E00B90&amp;gt;, _stacktrace = &amp;lt;traceback object at 0x0000023927E01040&amp;gt;\n\n    def increment(\n        self,\n        method=None,\n        url=None,\n        response=None,\n        error=None,\n        _pool=None,\n        _stacktrace=None,\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Return a new Retry object with incremented retry counters.\n    \n        :param response: A response object, or None, if the server did not\n            return a response.\n        :type response: :class:`~urllib3.response.HTTPResponse`\n        :param Exception error: An error encountered during the request, or\n            None if the response was received successfully.\n    \n        :return: A new ``Retry`` object.\n        &amp;quot;&amp;quot;&amp;quot;\n        if self.total is False and error:\n            # Disabled, indicate to re-raise the error.\n            raise six.reraise(type(error), error, _stacktrace)\n    \n        total = self.total\n        if total is not None:\n            total -= 1\n    \n        connect = self.connect\n        read = self.read\n        redirect = self.redirect\n        status_count = self.status\n        other = self.other\n        cause = &amp;quot;unknown&amp;quot;\n        status = None\n        redirect_location = None\n    \n        if error and self._is_connection_error(error):\n            # Connect retry?\n            if connect is False:\n                raise six.reraise(type(error), error, _stacktrace)\n            elif connect is not None:\n                connect -= 1\n    \n        elif error and self._is_read_error(error):\n            # Read retry?\n            if read is False or not self._is_method_retryable(method):\n                raise six.reraise(type(error), error, _stacktrace)\n            elif read is not None:\n                read -= 1\n    \n        elif error:\n            # Other retry?\n            if other is not None:\n                other -= 1\n    \n        elif response and response.get_redirect_location():\n            # Redirect retry?\n            if redirect is not None:\n                redirect -= 1\n            cause = &amp;quot;too many redirects&amp;quot;\n            redirect_location = response.get_redirect_location()\n            status = response.status\n    \n        else:\n            # Incrementing because of a server error like a 500 in\n            # status_forcelist and the given method is in the allowed_methods\n            cause = ResponseError.GENERIC_ERROR\n            if response and response.status:\n                if status_count is not None:\n                    status_count -= 1\n                cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status)\n                status = response.status\n    \n        history = self.history + (\n            RequestHistory(method, url, error, status, redirect_location),\n        )\n    \n        new_retry = self.new(\n            total=total,\n            connect=connect,\n            read=read,\n            redirect=redirect,\n            status=status_count,\n            other=other,\n            history=history,\n        )\n    \n        if new_retry.is_exhausted():\n&amp;gt;           raise MaxRetryError(_pool, url, error or ResponseError(cause))\nE           urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927E02AD0&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\retry.py:592: MaxRetryError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;scripts.test_ihrm_login.TestIhrmLogin object at 0x000002392729B250&amp;gt;\n\n    def test15_err_parames(self):\n        data = {&amp;quot;abc&amp;quot;: &amp;quot;13800000002&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;123456&amp;quot;}\n&amp;gt;       resp = IhrmLoginApi.login(data)\n\nscripts\\test_ihrm_login.py:138: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\napi\\ihrm_login_api.py:12: in login\n    resp = requests.post(url=&amp;quot;http://ihrm-test.itheima.net/api/sys/login&amp;quot;, json=req_data)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:115: in post\n    return request(&amp;quot;post&amp;quot;, url, data=data, json=json, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:59: in request\n    return session.request(method=method, url=url, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:587: in request\n    resp = self.send(prep, **send_kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:701: in send\n    r = adapter.send(request, **kwargs)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927E028D0&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n                resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n    \n            # Send the request.\n            else:\n                if hasattr(conn, &amp;quot;proxy_pool&amp;quot;):\n                    conn = conn.proxy_pool\n    \n                low_conn = conn._get_conn(timeout=DEFAULT_POOL_TIMEOUT)\n    \n                try:\n                    skip_host = &amp;quot;Host&amp;quot; in request.headers\n                    low_conn.putrequest(\n                        request.method,\n                        url,\n                        skip_accept_encoding=True,\n                        skip_host=skip_host,\n                    )\n    \n                    for header, value in request.headers.items():\n                        low_conn.putheader(header, value)\n    \n                    low_conn.endheaders()\n    \n                    for i in request.body:\n                        low_conn.send(hex(len(i))[2:].encode(&amp;quot;utf-8&amp;quot;))\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                        low_conn.send(i)\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                    low_conn.send(b&amp;quot;0\\r\\n\\r\\n&amp;quot;)\n    \n                    # Receive the response from the server\n                    r = low_conn.getresponse()\n    \n                    resp = HTTPResponse.from_httplib(\n                        r,\n                        pool=conn,\n                        connection=low_conn,\n                        preload_content=False,\n                        decode_content=False,\n                    )\n                except Exception:\n                    # If we hit any problems here, clean up the connection.\n                    # Then, raise so that we can handle the actual exception.\n                    low_conn.close()\n                    raise\n    \n        except (ProtocolError, OSError) as err:\n            raise ConnectionError(err, request=request)\n    \n        except MaxRetryError as e:\n            if isinstance(e.reason, ConnectTimeoutError):\n                # TODO: Remove this in 3.0.0: see #2811\n                if not isinstance(e.reason, NewConnectionError):\n                    raise ConnectTimeout(e, request=request)\n    \n            if isinstance(e.reason, ResponseError):\n                raise RetryError(e, request=request)\n    \n            if isinstance(e.reason, _ProxyError):\n                raise ProxyError(e, request=request)\n    \n            if isinstance(e.reason, _SSLError):\n                # This branch is for urllib3 v1.22 and later.\n                raise SSLError(e, request=request)\n    \n&amp;gt;           raise ConnectionError(e, request=request)\nE           requests.exceptions.ConnectionError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927E02AD0&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:565: ConnectionError\n\n------------------------------ Captured log call -------------------------------\nDEBUG    urllib3.connectionpool:connectionpool.py:228 Starting new HTTP connection (1): ihrm-test.itheima.net:80\n\n&#34;}], &#34;scripts/test_ihrm_login_params.py::TestIhrmLoginParams::test_ihrm_login[\\u767b\\u5f55\\u6210\\u529f-req_data0-200-True-10000-\\u64cd\\u4f5c\\u6210\\u529f]&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Failed&#34;, &#34;testId&#34;: &#34;scripts/test_ihrm_login_params.py::TestIhrmLoginParams::test_ihrm_login[\\u767b\\u5f55\\u6210\\u529f-req_data0-200-True-10000-\\u64cd\\u4f5c\\u6210\\u529f]&#34;, &#34;duration&#34;: &#34;56 ms&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Failed&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;scripts/test_ihrm_login_params.py::TestIhrmLoginParams::test_ihrm_login[\\u767b\\u5f55\\u6210\\u529f-req_data0-200-True-10000-\\u64cd\\u4f5c\\u6210\\u529f]&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;56 ms&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;self = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927DFEB50&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n&amp;gt;           conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:174: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\connection.py:72: in create_connection\n    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nhost = &amp;#x27;ihrm-test.itheima.net&amp;#x27;, port = 80, family = &amp;lt;AddressFamily.AF_UNSPEC: 0&amp;gt;, type = &amp;lt;SocketKind.SOCK_STREAM: 1&amp;gt;, proto = 0, flags = 0\n\n    def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):\n        &amp;quot;&amp;quot;&amp;quot;Resolve host and port into list of address info entries.\n    \n        Translate the host/port argument into a sequence of 5-tuples that contain\n        all the necessary arguments for creating a socket connected to that service.\n        host is a domain name, a string representation of an IPv4/v6 address or\n        None. port is a string service name such as &amp;#x27;http&amp;#x27;, a numeric port number or\n        None. By passing None as the value of host and port, you can pass NULL to\n        the underlying C API.\n    \n        The family, type and proto arguments can be optionally specified in order to\n        narrow the list of addresses returned. Passing zero as a value for each of\n        these arguments selects the full range of results.\n        &amp;quot;&amp;quot;&amp;quot;\n        # We override this function since we want to translate the numeric family\n        # and socket type values to enum constants.\n        addrlist = []\n&amp;gt;       for res in _socket.getaddrinfo(host, port, family, type, proto, flags):\nE       socket.gaierror: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\socket.py:962: gaierror\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927DFCC90&amp;gt;, method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, body = b&amp;#x27;{&amp;quot;mobile&amp;quot;: &amp;quot;13800000002&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;123456&amp;quot;}&amp;#x27;\nheaders = {&amp;#x27;User-Agent&amp;#x27;: &amp;#x27;python-requests/2.28.1&amp;#x27;, &amp;#x27;Accept-Encoding&amp;#x27;: &amp;#x27;gzip, deflate&amp;#x27;, &amp;#x27;Accept&amp;#x27;: &amp;#x27;*/*&amp;#x27;, &amp;#x27;Connection&amp;#x27;: &amp;#x27;keep-alive&amp;#x27;, &amp;#x27;Content-Length&amp;#x27;: &amp;#x27;47&amp;#x27;, &amp;#x27;Content-Type&amp;#x27;: &amp;#x27;application/json&amp;#x27;}\nretries = Retry(total=0, connect=None, read=False, redirect=None, status=None), redirect = False, assert_same_host = False, timeout = Timeout(connect=None, read=None, total=None)\npool_timeout = None, release_conn = False, chunked = False, body_pos = None, response_kw = {&amp;#x27;decode_content&amp;#x27;: False, &amp;#x27;preload_content&amp;#x27;: False}\nparsed_url = Url(scheme=None, auth=None, host=None, port=None, path=&amp;#x27;/api/sys/login&amp;#x27;, query=None, fragment=None), destination_scheme = None, conn = None, release_this_conn = True\nhttp_tunnel_required = False, err = None, clean_exit = False\n\n    def urlopen(\n        self,\n        method,\n        url,\n        body=None,\n        headers=None,\n        retries=None,\n        redirect=True,\n        assert_same_host=True,\n        timeout=_Default,\n        pool_timeout=None,\n        release_conn=None,\n        chunked=False,\n        body_pos=None,\n        **response_kw\n    ):\n        &amp;quot;&amp;quot;&amp;quot;\n        Get a connection from the pool and perform an HTTP request. This is the\n        lowest level call for making a request, so you&amp;#x27;ll need to specify all\n        the raw details.\n    \n        .. note::\n    \n           More commonly, it&amp;#x27;s appropriate to use a convenience method provided\n           by :class:`.RequestMethods`, such as :meth:`request`.\n    \n        .. note::\n    \n           `release_conn` will only behave as expected if\n           `preload_content=False` because we want to make\n           `preload_content=False` the default behaviour someday soon without\n           breaking backwards compatibility.\n    \n        :param method:\n            HTTP request method (such as GET, POST, PUT, etc.)\n    \n        :param url:\n            The URL to perform the request on.\n    \n        :param body:\n            Data to send in the request body, either :class:`str`, :class:`bytes`,\n            an iterable of :class:`str`/:class:`bytes`, or a file-like object.\n    \n        :param headers:\n            Dictionary of custom headers to send, such as User-Agent,\n            If-None-Match, etc. If None, pool headers are used. If provided,\n            these headers completely replace any pool-specific headers.\n    \n        :param retries:\n            Configure the number of retries to allow before raising a\n            :class:`~urllib3.exceptions.MaxRetryError` exception.\n    \n            Pass ``None`` to retry until you receive a response. Pass a\n            :class:`~urllib3.util.retry.Retry` object for fine-grained control\n            over different types of retries.\n            Pass an integer number to retry connection errors that many times,\n            but no other types of errors. Pass zero to never retry.\n    \n            If ``False``, then retries are disabled and any exception is raised\n            immediately. Also, instead of raising a MaxRetryError on redirects,\n            the redirect response will be returned.\n    \n        :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.\n    \n        :param redirect:\n            If True, automatically handle redirects (status codes 301, 302,\n            303, 307, 308). Each redirect counts as a retry. Disabling retries\n            will disable redirect, too.\n    \n        :param assert_same_host:\n            If ``True``, will make sure that the host of the pool requests is\n            consistent else will raise HostChangedError. When ``False``, you can\n            use the pool on an HTTP proxy and request foreign hosts.\n    \n        :param timeout:\n            If specified, overrides the default timeout for this one\n            request. It may be a float (in seconds) or an instance of\n            :class:`urllib3.util.Timeout`.\n    \n        :param pool_timeout:\n            If set and the pool is set to block=True, then this method will\n            block for ``pool_timeout`` seconds and raise EmptyPoolError if no\n            connection is available within the time period.\n    \n        :param release_conn:\n            If False, then the urlopen call will not release the connection\n            back into the pool once a response is received (but will release if\n            you read the entire contents of the response such as when\n            `preload_content=True`). This is useful if you&amp;#x27;re not preloading\n            the response&amp;#x27;s content immediately. You will need to call\n            ``r.release_conn()`` on the response ``r`` to return the connection\n            back into the pool. If None, it takes the value of\n            ``response_kw.get(&amp;#x27;preload_content&amp;#x27;, True)``.\n    \n        :param chunked:\n            If True, urllib3 will send the body using chunked transfer\n            encoding. Otherwise, urllib3 will send the body using the standard\n            content-length form. Defaults to False.\n    \n        :param int body_pos:\n            Position to seek to in file-like body in the event of a retry or\n            redirect. Typically this won&amp;#x27;t need to be set because urllib3 will\n            auto-populate the value when needed.\n    \n        :param \\\\**response_kw:\n            Additional parameters are passed to\n            :meth:`urllib3.response.HTTPResponse.from_httplib`\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        parsed_url = parse_url(url)\n        destination_scheme = parsed_url.scheme\n    \n        if headers is None:\n            headers = self.headers\n    \n        if not isinstance(retries, Retry):\n            retries = Retry.from_int(retries, redirect=redirect, default=self.retries)\n    \n        if release_conn is None:\n            release_conn = response_kw.get(&amp;quot;preload_content&amp;quot;, True)\n    \n        # Check host\n        if assert_same_host and not self.is_same_host(url):\n            raise HostChangedError(self, url, retries)\n    \n        # Ensure that the URL we&amp;#x27;re connecting to is properly encoded\n        if url.startswith(&amp;quot;/&amp;quot;):\n            url = six.ensure_str(_encode_target(url))\n        else:\n            url = six.ensure_str(parsed_url.url)\n    \n        conn = None\n    \n        # Track whether `conn` needs to be released before\n        # returning/raising/recursing. Update this variable if necessary, and\n        # leave `release_conn` constant throughout the function. That way, if\n        # the function recurses, the original value of `release_conn` will be\n        # passed down into the recursive call, and its value will be respected.\n        #\n        # See issue #651 [1] for details.\n        #\n        # [1] &amp;lt;https://github.com/urllib3/urllib3/issues/651&amp;gt;\n        release_this_conn = release_conn\n    \n        http_tunnel_required = connection_requires_http_tunnel(\n            self.proxy, self.proxy_config, destination_scheme\n        )\n    \n        # Merge the proxy headers. Only done when not using HTTP CONNECT. We\n        # have to copy the headers dict so we can safely change it without those\n        # changes being reflected in anyone else&amp;#x27;s copy.\n        if not http_tunnel_required:\n            headers = headers.copy()\n            headers.update(self.proxy_headers)\n    \n        # Must keep the exception bound to a separate variable or else Python 3\n        # complains about UnboundLocalError.\n        err = None\n    \n        # Keep track of whether we cleanly exited the except block. This\n        # ensures we do proper cleanup in finally.\n        clean_exit = False\n    \n        # Rewind body position, if needed. Record current position\n        # for future rewinds in the event of a redirect/retry.\n        body_pos = set_file_position(body, body_pos)\n    \n        try:\n            # Request a connection from the queue.\n            timeout_obj = self._get_timeout(timeout)\n            conn = self._get_conn(timeout=pool_timeout)\n    \n            conn.timeout = timeout_obj.connect_timeout\n    \n            is_new_proxy_conn = self.proxy is not None and not getattr(\n                conn, &amp;quot;sock&amp;quot;, None\n            )\n            if is_new_proxy_conn and http_tunnel_required:\n                self._prepare_proxy(conn)\n    \n            # Make the request on the httplib connection object.\n&amp;gt;           httplib_response = self._make_request(\n                conn,\n                method,\n                url,\n                timeout=timeout_obj,\n                body=body,\n                headers=headers,\n                chunked=chunked,\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:703: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:398: in _make_request\n    conn.request(method, url, **httplib_request_kw)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:239: in request\n    super(HTTPConnection, self).request(method, url, body=body, headers=headers)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1282: in request\n    self._send_request(method, url, body, headers, encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1328: in _send_request\n    self.endheaders(body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1277: in endheaders\n    self._send_output(message_body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1037: in _send_output\n    self.send(msg)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:975: in send\n    self.connect()\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:205: in connect\n    conn = self._new_conn()\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927DFEB50&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n            conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n    \n        except SocketTimeout:\n            raise ConnectTimeoutError(\n                self,\n                &amp;quot;Connection to %s timed out. (connect timeout=%s)&amp;quot;\n                % (self.host, self.timeout),\n            )\n    \n        except SocketError as e:\n&amp;gt;           raise NewConnectionError(\n                self, &amp;quot;Failed to establish a new connection: %s&amp;quot; % e\n            )\nE           urllib3.exceptions.NewConnectionError: &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927DFEB50&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:186: NewConnectionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x00000239277B6910&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n&amp;gt;               resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:489: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:787: in urlopen\n    retries = retries.increment(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = Retry(total=0, connect=None, read=False, redirect=None, status=None), method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, response = None\nerror = NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927DFEB50&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;)\n_pool = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927DFCC90&amp;gt;, _stacktrace = &amp;lt;traceback object at 0x0000023927DFE7C0&amp;gt;\n\n    def increment(\n        self,\n        method=None,\n        url=None,\n        response=None,\n        error=None,\n        _pool=None,\n        _stacktrace=None,\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Return a new Retry object with incremented retry counters.\n    \n        :param response: A response object, or None, if the server did not\n            return a response.\n        :type response: :class:`~urllib3.response.HTTPResponse`\n        :param Exception error: An error encountered during the request, or\n            None if the response was received successfully.\n    \n        :return: A new ``Retry`` object.\n        &amp;quot;&amp;quot;&amp;quot;\n        if self.total is False and error:\n            # Disabled, indicate to re-raise the error.\n            raise six.reraise(type(error), error, _stacktrace)\n    \n        total = self.total\n        if total is not None:\n            total -= 1\n    \n        connect = self.connect\n        read = self.read\n        redirect = self.redirect\n        status_count = self.status\n        other = self.other\n        cause = &amp;quot;unknown&amp;quot;\n        status = None\n        redirect_location = None\n    \n        if error and self._is_connection_error(error):\n            # Connect retry?\n            if connect is False:\n                raise six.reraise(type(error), error, _stacktrace)\n            elif connect is not None:\n                connect -= 1\n    \n        elif error and self._is_read_error(error):\n            # Read retry?\n            if read is False or not self._is_method_retryable(method):\n                raise six.reraise(type(error), error, _stacktrace)\n            elif read is not None:\n                read -= 1\n    \n        elif error:\n            # Other retry?\n            if other is not None:\n                other -= 1\n    \n        elif response and response.get_redirect_location():\n            # Redirect retry?\n            if redirect is not None:\n                redirect -= 1\n            cause = &amp;quot;too many redirects&amp;quot;\n            redirect_location = response.get_redirect_location()\n            status = response.status\n    \n        else:\n            # Incrementing because of a server error like a 500 in\n            # status_forcelist and the given method is in the allowed_methods\n            cause = ResponseError.GENERIC_ERROR\n            if response and response.status:\n                if status_count is not None:\n                    status_count -= 1\n                cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status)\n                status = response.status\n    \n        history = self.history + (\n            RequestHistory(method, url, error, status, redirect_location),\n        )\n    \n        new_retry = self.new(\n            total=total,\n            connect=connect,\n            read=read,\n            redirect=redirect,\n            status=status_count,\n            other=other,\n            history=history,\n        )\n    \n        if new_retry.is_exhausted():\n&amp;gt;           raise MaxRetryError(_pool, url, error or ResponseError(cause))\nE           urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927DFEB50&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\retry.py:592: MaxRetryError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;scripts.test_ihrm_login_params.TestIhrmLoginParams object at 0x00000239272AF050&amp;gt;, desc = &amp;#x27;\u767b\u5f55\u6210\u529f&amp;#x27;, req_data = {&amp;#x27;mobile&amp;#x27;: &amp;#x27;13800000002&amp;#x27;, &amp;#x27;password&amp;#x27;: &amp;#x27;123456&amp;#x27;}, status_code = 200\nsuccess = True, code = 10000, message = &amp;#x27;\u64cd\u4f5c\u6210\u529f&amp;#x27;\n\n    @pytest.mark.parametrize(&amp;quot;desc, req_data, status_code, success, code, message&amp;quot;, data)\n    # \u5b9a\u4e49 \u901a\u7528\u6d4b\u8bd5\u65b9\u6cd5 - \u6d4b\u8bd5ihrm\u767b\u5f55\u63a5\u53e3\n    def test_ihrm_login(self, desc, req_data, status_code, success, code, message):\n        # \u8c03\u7528 \u81ea\u5df1\u5c01\u88c5\u7684 api\uff0c \u83b7\u53d6\u54cd\u5e94\u7ed3\u679c\n&amp;gt;       resp = IhrmLoginApi.login(req_data)\n\nscripts\\test_ihrm_login_params.py:20: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\napi\\ihrm_login_api.py:12: in login\n    resp = requests.post(url=&amp;quot;http://ihrm-test.itheima.net/api/sys/login&amp;quot;, json=req_data)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:115: in post\n    return request(&amp;quot;post&amp;quot;, url, data=data, json=json, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:59: in request\n    return session.request(method=method, url=url, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:587: in request\n    resp = self.send(prep, **send_kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:701: in send\n    r = adapter.send(request, **kwargs)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x00000239277B6910&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n                resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n    \n            # Send the request.\n            else:\n                if hasattr(conn, &amp;quot;proxy_pool&amp;quot;):\n                    conn = conn.proxy_pool\n    \n                low_conn = conn._get_conn(timeout=DEFAULT_POOL_TIMEOUT)\n    \n                try:\n                    skip_host = &amp;quot;Host&amp;quot; in request.headers\n                    low_conn.putrequest(\n                        request.method,\n                        url,\n                        skip_accept_encoding=True,\n                        skip_host=skip_host,\n                    )\n    \n                    for header, value in request.headers.items():\n                        low_conn.putheader(header, value)\n    \n                    low_conn.endheaders()\n    \n                    for i in request.body:\n                        low_conn.send(hex(len(i))[2:].encode(&amp;quot;utf-8&amp;quot;))\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                        low_conn.send(i)\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                    low_conn.send(b&amp;quot;0\\r\\n\\r\\n&amp;quot;)\n    \n                    # Receive the response from the server\n                    r = low_conn.getresponse()\n    \n                    resp = HTTPResponse.from_httplib(\n                        r,\n                        pool=conn,\n                        connection=low_conn,\n                        preload_content=False,\n                        decode_content=False,\n                    )\n                except Exception:\n                    # If we hit any problems here, clean up the connection.\n                    # Then, raise so that we can handle the actual exception.\n                    low_conn.close()\n                    raise\n    \n        except (ProtocolError, OSError) as err:\n            raise ConnectionError(err, request=request)\n    \n        except MaxRetryError as e:\n            if isinstance(e.reason, ConnectTimeoutError):\n                # TODO: Remove this in 3.0.0: see #2811\n                if not isinstance(e.reason, NewConnectionError):\n                    raise ConnectTimeout(e, request=request)\n    \n            if isinstance(e.reason, ResponseError):\n                raise RetryError(e, request=request)\n    \n            if isinstance(e.reason, _ProxyError):\n                raise ProxyError(e, request=request)\n    \n            if isinstance(e.reason, _SSLError):\n                # This branch is for urllib3 v1.22 and later.\n                raise SSLError(e, request=request)\n    \n&amp;gt;           raise ConnectionError(e, request=request)\nE           requests.exceptions.ConnectionError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927DFEB50&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:565: ConnectionError\n\n------------------------------ Captured log call -------------------------------\nDEBUG    urllib3.connectionpool:connectionpool.py:228 Starting new HTTP connection (1): ihrm-test.itheima.net:80\n\n&#34;}], &#34;scripts/test_ihrm_login_params.py::TestIhrmLoginParams::test_ihrm_login[\\u624b\\u673a\\u53f7\\u4e0d\\u5b58\\u5728-req_data1-200-False-20001-\\u7528\\u6237\\u540d\\u6216\\u5bc6\\u7801\\u9519\\u8bef]&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Failed&#34;, &#34;testId&#34;: &#34;scripts/test_ihrm_login_params.py::TestIhrmLoginParams::test_ihrm_login[\\u624b\\u673a\\u53f7\\u4e0d\\u5b58\\u5728-req_data1-200-False-20001-\\u7528\\u6237\\u540d\\u6216\\u5bc6\\u7801\\u9519\\u8bef]&#34;, &#34;duration&#34;: &#34;46 ms&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Failed&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;scripts/test_ihrm_login_params.py::TestIhrmLoginParams::test_ihrm_login[\\u624b\\u673a\\u53f7\\u4e0d\\u5b58\\u5728-req_data1-200-False-20001-\\u7528\\u6237\\u540d\\u6216\\u5bc6\\u7801\\u9519\\u8bef]&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;46 ms&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;self = &amp;lt;urllib3.connection.HTTPConnection object at 0x00000239246C8AD0&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n&amp;gt;           conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:174: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\connection.py:72: in create_connection\n    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nhost = &amp;#x27;ihrm-test.itheima.net&amp;#x27;, port = 80, family = &amp;lt;AddressFamily.AF_UNSPEC: 0&amp;gt;, type = &amp;lt;SocketKind.SOCK_STREAM: 1&amp;gt;, proto = 0, flags = 0\n\n    def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):\n        &amp;quot;&amp;quot;&amp;quot;Resolve host and port into list of address info entries.\n    \n        Translate the host/port argument into a sequence of 5-tuples that contain\n        all the necessary arguments for creating a socket connected to that service.\n        host is a domain name, a string representation of an IPv4/v6 address or\n        None. port is a string service name such as &amp;#x27;http&amp;#x27;, a numeric port number or\n        None. By passing None as the value of host and port, you can pass NULL to\n        the underlying C API.\n    \n        The family, type and proto arguments can be optionally specified in order to\n        narrow the list of addresses returned. Passing zero as a value for each of\n        these arguments selects the full range of results.\n        &amp;quot;&amp;quot;&amp;quot;\n        # We override this function since we want to translate the numeric family\n        # and socket type values to enum constants.\n        addrlist = []\n&amp;gt;       for res in _socket.getaddrinfo(host, port, family, type, proto, flags):\nE       socket.gaierror: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\socket.py:962: gaierror\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927D3EF10&amp;gt;, method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, body = b&amp;#x27;{&amp;quot;mobile&amp;quot;: &amp;quot;13874893701&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;123456&amp;quot;}&amp;#x27;\nheaders = {&amp;#x27;User-Agent&amp;#x27;: &amp;#x27;python-requests/2.28.1&amp;#x27;, &amp;#x27;Accept-Encoding&amp;#x27;: &amp;#x27;gzip, deflate&amp;#x27;, &amp;#x27;Accept&amp;#x27;: &amp;#x27;*/*&amp;#x27;, &amp;#x27;Connection&amp;#x27;: &amp;#x27;keep-alive&amp;#x27;, &amp;#x27;Content-Length&amp;#x27;: &amp;#x27;47&amp;#x27;, &amp;#x27;Content-Type&amp;#x27;: &amp;#x27;application/json&amp;#x27;}\nretries = Retry(total=0, connect=None, read=False, redirect=None, status=None), redirect = False, assert_same_host = False, timeout = Timeout(connect=None, read=None, total=None)\npool_timeout = None, release_conn = False, chunked = False, body_pos = None, response_kw = {&amp;#x27;decode_content&amp;#x27;: False, &amp;#x27;preload_content&amp;#x27;: False}\nparsed_url = Url(scheme=None, auth=None, host=None, port=None, path=&amp;#x27;/api/sys/login&amp;#x27;, query=None, fragment=None), destination_scheme = None, conn = None, release_this_conn = True\nhttp_tunnel_required = False, err = None, clean_exit = False\n\n    def urlopen(\n        self,\n        method,\n        url,\n        body=None,\n        headers=None,\n        retries=None,\n        redirect=True,\n        assert_same_host=True,\n        timeout=_Default,\n        pool_timeout=None,\n        release_conn=None,\n        chunked=False,\n        body_pos=None,\n        **response_kw\n    ):\n        &amp;quot;&amp;quot;&amp;quot;\n        Get a connection from the pool and perform an HTTP request. This is the\n        lowest level call for making a request, so you&amp;#x27;ll need to specify all\n        the raw details.\n    \n        .. note::\n    \n           More commonly, it&amp;#x27;s appropriate to use a convenience method provided\n           by :class:`.RequestMethods`, such as :meth:`request`.\n    \n        .. note::\n    \n           `release_conn` will only behave as expected if\n           `preload_content=False` because we want to make\n           `preload_content=False` the default behaviour someday soon without\n           breaking backwards compatibility.\n    \n        :param method:\n            HTTP request method (such as GET, POST, PUT, etc.)\n    \n        :param url:\n            The URL to perform the request on.\n    \n        :param body:\n            Data to send in the request body, either :class:`str`, :class:`bytes`,\n            an iterable of :class:`str`/:class:`bytes`, or a file-like object.\n    \n        :param headers:\n            Dictionary of custom headers to send, such as User-Agent,\n            If-None-Match, etc. If None, pool headers are used. If provided,\n            these headers completely replace any pool-specific headers.\n    \n        :param retries:\n            Configure the number of retries to allow before raising a\n            :class:`~urllib3.exceptions.MaxRetryError` exception.\n    \n            Pass ``None`` to retry until you receive a response. Pass a\n            :class:`~urllib3.util.retry.Retry` object for fine-grained control\n            over different types of retries.\n            Pass an integer number to retry connection errors that many times,\n            but no other types of errors. Pass zero to never retry.\n    \n            If ``False``, then retries are disabled and any exception is raised\n            immediately. Also, instead of raising a MaxRetryError on redirects,\n            the redirect response will be returned.\n    \n        :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.\n    \n        :param redirect:\n            If True, automatically handle redirects (status codes 301, 302,\n            303, 307, 308). Each redirect counts as a retry. Disabling retries\n            will disable redirect, too.\n    \n        :param assert_same_host:\n            If ``True``, will make sure that the host of the pool requests is\n            consistent else will raise HostChangedError. When ``False``, you can\n            use the pool on an HTTP proxy and request foreign hosts.\n    \n        :param timeout:\n            If specified, overrides the default timeout for this one\n            request. It may be a float (in seconds) or an instance of\n            :class:`urllib3.util.Timeout`.\n    \n        :param pool_timeout:\n            If set and the pool is set to block=True, then this method will\n            block for ``pool_timeout`` seconds and raise EmptyPoolError if no\n            connection is available within the time period.\n    \n        :param release_conn:\n            If False, then the urlopen call will not release the connection\n            back into the pool once a response is received (but will release if\n            you read the entire contents of the response such as when\n            `preload_content=True`). This is useful if you&amp;#x27;re not preloading\n            the response&amp;#x27;s content immediately. You will need to call\n            ``r.release_conn()`` on the response ``r`` to return the connection\n            back into the pool. If None, it takes the value of\n            ``response_kw.get(&amp;#x27;preload_content&amp;#x27;, True)``.\n    \n        :param chunked:\n            If True, urllib3 will send the body using chunked transfer\n            encoding. Otherwise, urllib3 will send the body using the standard\n            content-length form. Defaults to False.\n    \n        :param int body_pos:\n            Position to seek to in file-like body in the event of a retry or\n            redirect. Typically this won&amp;#x27;t need to be set because urllib3 will\n            auto-populate the value when needed.\n    \n        :param \\\\**response_kw:\n            Additional parameters are passed to\n            :meth:`urllib3.response.HTTPResponse.from_httplib`\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        parsed_url = parse_url(url)\n        destination_scheme = parsed_url.scheme\n    \n        if headers is None:\n            headers = self.headers\n    \n        if not isinstance(retries, Retry):\n            retries = Retry.from_int(retries, redirect=redirect, default=self.retries)\n    \n        if release_conn is None:\n            release_conn = response_kw.get(&amp;quot;preload_content&amp;quot;, True)\n    \n        # Check host\n        if assert_same_host and not self.is_same_host(url):\n            raise HostChangedError(self, url, retries)\n    \n        # Ensure that the URL we&amp;#x27;re connecting to is properly encoded\n        if url.startswith(&amp;quot;/&amp;quot;):\n            url = six.ensure_str(_encode_target(url))\n        else:\n            url = six.ensure_str(parsed_url.url)\n    \n        conn = None\n    \n        # Track whether `conn` needs to be released before\n        # returning/raising/recursing. Update this variable if necessary, and\n        # leave `release_conn` constant throughout the function. That way, if\n        # the function recurses, the original value of `release_conn` will be\n        # passed down into the recursive call, and its value will be respected.\n        #\n        # See issue #651 [1] for details.\n        #\n        # [1] &amp;lt;https://github.com/urllib3/urllib3/issues/651&amp;gt;\n        release_this_conn = release_conn\n    \n        http_tunnel_required = connection_requires_http_tunnel(\n            self.proxy, self.proxy_config, destination_scheme\n        )\n    \n        # Merge the proxy headers. Only done when not using HTTP CONNECT. We\n        # have to copy the headers dict so we can safely change it without those\n        # changes being reflected in anyone else&amp;#x27;s copy.\n        if not http_tunnel_required:\n            headers = headers.copy()\n            headers.update(self.proxy_headers)\n    \n        # Must keep the exception bound to a separate variable or else Python 3\n        # complains about UnboundLocalError.\n        err = None\n    \n        # Keep track of whether we cleanly exited the except block. This\n        # ensures we do proper cleanup in finally.\n        clean_exit = False\n    \n        # Rewind body position, if needed. Record current position\n        # for future rewinds in the event of a redirect/retry.\n        body_pos = set_file_position(body, body_pos)\n    \n        try:\n            # Request a connection from the queue.\n            timeout_obj = self._get_timeout(timeout)\n            conn = self._get_conn(timeout=pool_timeout)\n    \n            conn.timeout = timeout_obj.connect_timeout\n    \n            is_new_proxy_conn = self.proxy is not None and not getattr(\n                conn, &amp;quot;sock&amp;quot;, None\n            )\n            if is_new_proxy_conn and http_tunnel_required:\n                self._prepare_proxy(conn)\n    \n            # Make the request on the httplib connection object.\n&amp;gt;           httplib_response = self._make_request(\n                conn,\n                method,\n                url,\n                timeout=timeout_obj,\n                body=body,\n                headers=headers,\n                chunked=chunked,\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:703: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:398: in _make_request\n    conn.request(method, url, **httplib_request_kw)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:239: in request\n    super(HTTPConnection, self).request(method, url, body=body, headers=headers)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1282: in request\n    self._send_request(method, url, body, headers, encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1328: in _send_request\n    self.endheaders(body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1277: in endheaders\n    self._send_output(message_body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1037: in _send_output\n    self.send(msg)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:975: in send\n    self.connect()\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:205: in connect\n    conn = self._new_conn()\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;urllib3.connection.HTTPConnection object at 0x00000239246C8AD0&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n            conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n    \n        except SocketTimeout:\n            raise ConnectTimeoutError(\n                self,\n                &amp;quot;Connection to %s timed out. (connect timeout=%s)&amp;quot;\n                % (self.host, self.timeout),\n            )\n    \n        except SocketError as e:\n&amp;gt;           raise NewConnectionError(\n                self, &amp;quot;Failed to establish a new connection: %s&amp;quot; % e\n            )\nE           urllib3.exceptions.NewConnectionError: &amp;lt;urllib3.connection.HTTPConnection object at 0x00000239246C8AD0&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:186: NewConnectionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927D3D450&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n&amp;gt;               resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:489: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:787: in urlopen\n    retries = retries.increment(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = Retry(total=0, connect=None, read=False, redirect=None, status=None), method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, response = None\nerror = NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x00000239246C8AD0&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;)\n_pool = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927D3EF10&amp;gt;, _stacktrace = &amp;lt;traceback object at 0x0000023927D3C080&amp;gt;\n\n    def increment(\n        self,\n        method=None,\n        url=None,\n        response=None,\n        error=None,\n        _pool=None,\n        _stacktrace=None,\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Return a new Retry object with incremented retry counters.\n    \n        :param response: A response object, or None, if the server did not\n            return a response.\n        :type response: :class:`~urllib3.response.HTTPResponse`\n        :param Exception error: An error encountered during the request, or\n            None if the response was received successfully.\n    \n        :return: A new ``Retry`` object.\n        &amp;quot;&amp;quot;&amp;quot;\n        if self.total is False and error:\n            # Disabled, indicate to re-raise the error.\n            raise six.reraise(type(error), error, _stacktrace)\n    \n        total = self.total\n        if total is not None:\n            total -= 1\n    \n        connect = self.connect\n        read = self.read\n        redirect = self.redirect\n        status_count = self.status\n        other = self.other\n        cause = &amp;quot;unknown&amp;quot;\n        status = None\n        redirect_location = None\n    \n        if error and self._is_connection_error(error):\n            # Connect retry?\n            if connect is False:\n                raise six.reraise(type(error), error, _stacktrace)\n            elif connect is not None:\n                connect -= 1\n    \n        elif error and self._is_read_error(error):\n            # Read retry?\n            if read is False or not self._is_method_retryable(method):\n                raise six.reraise(type(error), error, _stacktrace)\n            elif read is not None:\n                read -= 1\n    \n        elif error:\n            # Other retry?\n            if other is not None:\n                other -= 1\n    \n        elif response and response.get_redirect_location():\n            # Redirect retry?\n            if redirect is not None:\n                redirect -= 1\n            cause = &amp;quot;too many redirects&amp;quot;\n            redirect_location = response.get_redirect_location()\n            status = response.status\n    \n        else:\n            # Incrementing because of a server error like a 500 in\n            # status_forcelist and the given method is in the allowed_methods\n            cause = ResponseError.GENERIC_ERROR\n            if response and response.status:\n                if status_count is not None:\n                    status_count -= 1\n                cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status)\n                status = response.status\n    \n        history = self.history + (\n            RequestHistory(method, url, error, status, redirect_location),\n        )\n    \n        new_retry = self.new(\n            total=total,\n            connect=connect,\n            read=read,\n            redirect=redirect,\n            status=status_count,\n            other=other,\n            history=history,\n        )\n    \n        if new_retry.is_exhausted():\n&amp;gt;           raise MaxRetryError(_pool, url, error or ResponseError(cause))\nE           urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x00000239246C8AD0&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\retry.py:592: MaxRetryError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;scripts.test_ihrm_login_params.TestIhrmLoginParams object at 0x00000239272AF190&amp;gt;, desc = &amp;#x27;\u624b\u673a\u53f7\u4e0d\u5b58\u5728&amp;#x27;, req_data = {&amp;#x27;mobile&amp;#x27;: &amp;#x27;13874893701&amp;#x27;, &amp;#x27;password&amp;#x27;: &amp;#x27;123456&amp;#x27;}, status_code = 200\nsuccess = False, code = 20001, message = &amp;#x27;\u7528\u6237\u540d\u6216\u5bc6\u7801\u9519\u8bef&amp;#x27;\n\n    @pytest.mark.parametrize(&amp;quot;desc, req_data, status_code, success, code, message&amp;quot;, data)\n    # \u5b9a\u4e49 \u901a\u7528\u6d4b\u8bd5\u65b9\u6cd5 - \u6d4b\u8bd5ihrm\u767b\u5f55\u63a5\u53e3\n    def test_ihrm_login(self, desc, req_data, status_code, success, code, message):\n        # \u8c03\u7528 \u81ea\u5df1\u5c01\u88c5\u7684 api\uff0c \u83b7\u53d6\u54cd\u5e94\u7ed3\u679c\n&amp;gt;       resp = IhrmLoginApi.login(req_data)\n\nscripts\\test_ihrm_login_params.py:20: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\napi\\ihrm_login_api.py:12: in login\n    resp = requests.post(url=&amp;quot;http://ihrm-test.itheima.net/api/sys/login&amp;quot;, json=req_data)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:115: in post\n    return request(&amp;quot;post&amp;quot;, url, data=data, json=json, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:59: in request\n    return session.request(method=method, url=url, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:587: in request\n    resp = self.send(prep, **send_kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:701: in send\n    r = adapter.send(request, **kwargs)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927D3D450&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n                resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n    \n            # Send the request.\n            else:\n                if hasattr(conn, &amp;quot;proxy_pool&amp;quot;):\n                    conn = conn.proxy_pool\n    \n                low_conn = conn._get_conn(timeout=DEFAULT_POOL_TIMEOUT)\n    \n                try:\n                    skip_host = &amp;quot;Host&amp;quot; in request.headers\n                    low_conn.putrequest(\n                        request.method,\n                        url,\n                        skip_accept_encoding=True,\n                        skip_host=skip_host,\n                    )\n    \n                    for header, value in request.headers.items():\n                        low_conn.putheader(header, value)\n    \n                    low_conn.endheaders()\n    \n                    for i in request.body:\n                        low_conn.send(hex(len(i))[2:].encode(&amp;quot;utf-8&amp;quot;))\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                        low_conn.send(i)\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                    low_conn.send(b&amp;quot;0\\r\\n\\r\\n&amp;quot;)\n    \n                    # Receive the response from the server\n                    r = low_conn.getresponse()\n    \n                    resp = HTTPResponse.from_httplib(\n                        r,\n                        pool=conn,\n                        connection=low_conn,\n                        preload_content=False,\n                        decode_content=False,\n                    )\n                except Exception:\n                    # If we hit any problems here, clean up the connection.\n                    # Then, raise so that we can handle the actual exception.\n                    low_conn.close()\n                    raise\n    \n        except (ProtocolError, OSError) as err:\n            raise ConnectionError(err, request=request)\n    \n        except MaxRetryError as e:\n            if isinstance(e.reason, ConnectTimeoutError):\n                # TODO: Remove this in 3.0.0: see #2811\n                if not isinstance(e.reason, NewConnectionError):\n                    raise ConnectTimeout(e, request=request)\n    \n            if isinstance(e.reason, ResponseError):\n                raise RetryError(e, request=request)\n    \n            if isinstance(e.reason, _ProxyError):\n                raise ProxyError(e, request=request)\n    \n            if isinstance(e.reason, _SSLError):\n                # This branch is for urllib3 v1.22 and later.\n                raise SSLError(e, request=request)\n    \n&amp;gt;           raise ConnectionError(e, request=request)\nE           requests.exceptions.ConnectionError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x00000239246C8AD0&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:565: ConnectionError\n\n------------------------------ Captured log call -------------------------------\nDEBUG    urllib3.connectionpool:connectionpool.py:228 Starting new HTTP connection (1): ihrm-test.itheima.net:80\n\n&#34;}], &#34;scripts/test_ihrm_login_params.py::TestIhrmLoginParams::test_ihrm_login[\\u5bc6\\u7801\\u9519\\u8bef-req_data2-200-False-20001-\\u7528\\u6237\\u540d\\u6216\\u5bc6\\u7801\\u9519\\u8bef]&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Failed&#34;, &#34;testId&#34;: &#34;scripts/test_ihrm_login_params.py::TestIhrmLoginParams::test_ihrm_login[\\u5bc6\\u7801\\u9519\\u8bef-req_data2-200-False-20001-\\u7528\\u6237\\u540d\\u6216\\u5bc6\\u7801\\u9519\\u8bef]&#34;, &#34;duration&#34;: &#34;47 ms&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Failed&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;scripts/test_ihrm_login_params.py::TestIhrmLoginParams::test_ihrm_login[\\u5bc6\\u7801\\u9519\\u8bef-req_data2-200-False-20001-\\u7528\\u6237\\u540d\\u6216\\u5bc6\\u7801\\u9519\\u8bef]&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;47 ms&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;self = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927817E90&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n&amp;gt;           conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:174: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\connection.py:72: in create_connection\n    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nhost = &amp;#x27;ihrm-test.itheima.net&amp;#x27;, port = 80, family = &amp;lt;AddressFamily.AF_UNSPEC: 0&amp;gt;, type = &amp;lt;SocketKind.SOCK_STREAM: 1&amp;gt;, proto = 0, flags = 0\n\n    def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):\n        &amp;quot;&amp;quot;&amp;quot;Resolve host and port into list of address info entries.\n    \n        Translate the host/port argument into a sequence of 5-tuples that contain\n        all the necessary arguments for creating a socket connected to that service.\n        host is a domain name, a string representation of an IPv4/v6 address or\n        None. port is a string service name such as &amp;#x27;http&amp;#x27;, a numeric port number or\n        None. By passing None as the value of host and port, you can pass NULL to\n        the underlying C API.\n    \n        The family, type and proto arguments can be optionally specified in order to\n        narrow the list of addresses returned. Passing zero as a value for each of\n        these arguments selects the full range of results.\n        &amp;quot;&amp;quot;&amp;quot;\n        # We override this function since we want to translate the numeric family\n        # and socket type values to enum constants.\n        addrlist = []\n&amp;gt;       for res in _socket.getaddrinfo(host, port, family, type, proto, flags):\nE       socket.gaierror: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\socket.py:962: gaierror\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927814E10&amp;gt;, method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, body = b&amp;#x27;{&amp;quot;mobile&amp;quot;: &amp;quot;13800000002&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;123456890&amp;quot;}&amp;#x27;\nheaders = {&amp;#x27;User-Agent&amp;#x27;: &amp;#x27;python-requests/2.28.1&amp;#x27;, &amp;#x27;Accept-Encoding&amp;#x27;: &amp;#x27;gzip, deflate&amp;#x27;, &amp;#x27;Accept&amp;#x27;: &amp;#x27;*/*&amp;#x27;, &amp;#x27;Connection&amp;#x27;: &amp;#x27;keep-alive&amp;#x27;, &amp;#x27;Content-Length&amp;#x27;: &amp;#x27;50&amp;#x27;, &amp;#x27;Content-Type&amp;#x27;: &amp;#x27;application/json&amp;#x27;}\nretries = Retry(total=0, connect=None, read=False, redirect=None, status=None), redirect = False, assert_same_host = False, timeout = Timeout(connect=None, read=None, total=None)\npool_timeout = None, release_conn = False, chunked = False, body_pos = None, response_kw = {&amp;#x27;decode_content&amp;#x27;: False, &amp;#x27;preload_content&amp;#x27;: False}\nparsed_url = Url(scheme=None, auth=None, host=None, port=None, path=&amp;#x27;/api/sys/login&amp;#x27;, query=None, fragment=None), destination_scheme = None, conn = None, release_this_conn = True\nhttp_tunnel_required = False, err = None, clean_exit = False\n\n    def urlopen(\n        self,\n        method,\n        url,\n        body=None,\n        headers=None,\n        retries=None,\n        redirect=True,\n        assert_same_host=True,\n        timeout=_Default,\n        pool_timeout=None,\n        release_conn=None,\n        chunked=False,\n        body_pos=None,\n        **response_kw\n    ):\n        &amp;quot;&amp;quot;&amp;quot;\n        Get a connection from the pool and perform an HTTP request. This is the\n        lowest level call for making a request, so you&amp;#x27;ll need to specify all\n        the raw details.\n    \n        .. note::\n    \n           More commonly, it&amp;#x27;s appropriate to use a convenience method provided\n           by :class:`.RequestMethods`, such as :meth:`request`.\n    \n        .. note::\n    \n           `release_conn` will only behave as expected if\n           `preload_content=False` because we want to make\n           `preload_content=False` the default behaviour someday soon without\n           breaking backwards compatibility.\n    \n        :param method:\n            HTTP request method (such as GET, POST, PUT, etc.)\n    \n        :param url:\n            The URL to perform the request on.\n    \n        :param body:\n            Data to send in the request body, either :class:`str`, :class:`bytes`,\n            an iterable of :class:`str`/:class:`bytes`, or a file-like object.\n    \n        :param headers:\n            Dictionary of custom headers to send, such as User-Agent,\n            If-None-Match, etc. If None, pool headers are used. If provided,\n            these headers completely replace any pool-specific headers.\n    \n        :param retries:\n            Configure the number of retries to allow before raising a\n            :class:`~urllib3.exceptions.MaxRetryError` exception.\n    \n            Pass ``None`` to retry until you receive a response. Pass a\n            :class:`~urllib3.util.retry.Retry` object for fine-grained control\n            over different types of retries.\n            Pass an integer number to retry connection errors that many times,\n            but no other types of errors. Pass zero to never retry.\n    \n            If ``False``, then retries are disabled and any exception is raised\n            immediately. Also, instead of raising a MaxRetryError on redirects,\n            the redirect response will be returned.\n    \n        :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.\n    \n        :param redirect:\n            If True, automatically handle redirects (status codes 301, 302,\n            303, 307, 308). Each redirect counts as a retry. Disabling retries\n            will disable redirect, too.\n    \n        :param assert_same_host:\n            If ``True``, will make sure that the host of the pool requests is\n            consistent else will raise HostChangedError. When ``False``, you can\n            use the pool on an HTTP proxy and request foreign hosts.\n    \n        :param timeout:\n            If specified, overrides the default timeout for this one\n            request. It may be a float (in seconds) or an instance of\n            :class:`urllib3.util.Timeout`.\n    \n        :param pool_timeout:\n            If set and the pool is set to block=True, then this method will\n            block for ``pool_timeout`` seconds and raise EmptyPoolError if no\n            connection is available within the time period.\n    \n        :param release_conn:\n            If False, then the urlopen call will not release the connection\n            back into the pool once a response is received (but will release if\n            you read the entire contents of the response such as when\n            `preload_content=True`). This is useful if you&amp;#x27;re not preloading\n            the response&amp;#x27;s content immediately. You will need to call\n            ``r.release_conn()`` on the response ``r`` to return the connection\n            back into the pool. If None, it takes the value of\n            ``response_kw.get(&amp;#x27;preload_content&amp;#x27;, True)``.\n    \n        :param chunked:\n            If True, urllib3 will send the body using chunked transfer\n            encoding. Otherwise, urllib3 will send the body using the standard\n            content-length form. Defaults to False.\n    \n        :param int body_pos:\n            Position to seek to in file-like body in the event of a retry or\n            redirect. Typically this won&amp;#x27;t need to be set because urllib3 will\n            auto-populate the value when needed.\n    \n        :param \\\\**response_kw:\n            Additional parameters are passed to\n            :meth:`urllib3.response.HTTPResponse.from_httplib`\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        parsed_url = parse_url(url)\n        destination_scheme = parsed_url.scheme\n    \n        if headers is None:\n            headers = self.headers\n    \n        if not isinstance(retries, Retry):\n            retries = Retry.from_int(retries, redirect=redirect, default=self.retries)\n    \n        if release_conn is None:\n            release_conn = response_kw.get(&amp;quot;preload_content&amp;quot;, True)\n    \n        # Check host\n        if assert_same_host and not self.is_same_host(url):\n            raise HostChangedError(self, url, retries)\n    \n        # Ensure that the URL we&amp;#x27;re connecting to is properly encoded\n        if url.startswith(&amp;quot;/&amp;quot;):\n            url = six.ensure_str(_encode_target(url))\n        else:\n            url = six.ensure_str(parsed_url.url)\n    \n        conn = None\n    \n        # Track whether `conn` needs to be released before\n        # returning/raising/recursing. Update this variable if necessary, and\n        # leave `release_conn` constant throughout the function. That way, if\n        # the function recurses, the original value of `release_conn` will be\n        # passed down into the recursive call, and its value will be respected.\n        #\n        # See issue #651 [1] for details.\n        #\n        # [1] &amp;lt;https://github.com/urllib3/urllib3/issues/651&amp;gt;\n        release_this_conn = release_conn\n    \n        http_tunnel_required = connection_requires_http_tunnel(\n            self.proxy, self.proxy_config, destination_scheme\n        )\n    \n        # Merge the proxy headers. Only done when not using HTTP CONNECT. We\n        # have to copy the headers dict so we can safely change it without those\n        # changes being reflected in anyone else&amp;#x27;s copy.\n        if not http_tunnel_required:\n            headers = headers.copy()\n            headers.update(self.proxy_headers)\n    \n        # Must keep the exception bound to a separate variable or else Python 3\n        # complains about UnboundLocalError.\n        err = None\n    \n        # Keep track of whether we cleanly exited the except block. This\n        # ensures we do proper cleanup in finally.\n        clean_exit = False\n    \n        # Rewind body position, if needed. Record current position\n        # for future rewinds in the event of a redirect/retry.\n        body_pos = set_file_position(body, body_pos)\n    \n        try:\n            # Request a connection from the queue.\n            timeout_obj = self._get_timeout(timeout)\n            conn = self._get_conn(timeout=pool_timeout)\n    \n            conn.timeout = timeout_obj.connect_timeout\n    \n            is_new_proxy_conn = self.proxy is not None and not getattr(\n                conn, &amp;quot;sock&amp;quot;, None\n            )\n            if is_new_proxy_conn and http_tunnel_required:\n                self._prepare_proxy(conn)\n    \n            # Make the request on the httplib connection object.\n&amp;gt;           httplib_response = self._make_request(\n                conn,\n                method,\n                url,\n                timeout=timeout_obj,\n                body=body,\n                headers=headers,\n                chunked=chunked,\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:703: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:398: in _make_request\n    conn.request(method, url, **httplib_request_kw)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:239: in request\n    super(HTTPConnection, self).request(method, url, body=body, headers=headers)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1282: in request\n    self._send_request(method, url, body, headers, encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1328: in _send_request\n    self.endheaders(body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1277: in endheaders\n    self._send_output(message_body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1037: in _send_output\n    self.send(msg)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:975: in send\n    self.connect()\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:205: in connect\n    conn = self._new_conn()\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927817E90&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n            conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n    \n        except SocketTimeout:\n            raise ConnectTimeoutError(\n                self,\n                &amp;quot;Connection to %s timed out. (connect timeout=%s)&amp;quot;\n                % (self.host, self.timeout),\n            )\n    \n        except SocketError as e:\n&amp;gt;           raise NewConnectionError(\n                self, &amp;quot;Failed to establish a new connection: %s&amp;quot; % e\n            )\nE           urllib3.exceptions.NewConnectionError: &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927817E90&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:186: NewConnectionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927814850&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n&amp;gt;               resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:489: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:787: in urlopen\n    retries = retries.increment(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = Retry(total=0, connect=None, read=False, redirect=None, status=None), method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, response = None\nerror = NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927817E90&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;)\n_pool = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927814E10&amp;gt;, _stacktrace = &amp;lt;traceback object at 0x00000239274168C0&amp;gt;\n\n    def increment(\n        self,\n        method=None,\n        url=None,\n        response=None,\n        error=None,\n        _pool=None,\n        _stacktrace=None,\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Return a new Retry object with incremented retry counters.\n    \n        :param response: A response object, or None, if the server did not\n            return a response.\n        :type response: :class:`~urllib3.response.HTTPResponse`\n        :param Exception error: An error encountered during the request, or\n            None if the response was received successfully.\n    \n        :return: A new ``Retry`` object.\n        &amp;quot;&amp;quot;&amp;quot;\n        if self.total is False and error:\n            # Disabled, indicate to re-raise the error.\n            raise six.reraise(type(error), error, _stacktrace)\n    \n        total = self.total\n        if total is not None:\n            total -= 1\n    \n        connect = self.connect\n        read = self.read\n        redirect = self.redirect\n        status_count = self.status\n        other = self.other\n        cause = &amp;quot;unknown&amp;quot;\n        status = None\n        redirect_location = None\n    \n        if error and self._is_connection_error(error):\n            # Connect retry?\n            if connect is False:\n                raise six.reraise(type(error), error, _stacktrace)\n            elif connect is not None:\n                connect -= 1\n    \n        elif error and self._is_read_error(error):\n            # Read retry?\n            if read is False or not self._is_method_retryable(method):\n                raise six.reraise(type(error), error, _stacktrace)\n            elif read is not None:\n                read -= 1\n    \n        elif error:\n            # Other retry?\n            if other is not None:\n                other -= 1\n    \n        elif response and response.get_redirect_location():\n            # Redirect retry?\n            if redirect is not None:\n                redirect -= 1\n            cause = &amp;quot;too many redirects&amp;quot;\n            redirect_location = response.get_redirect_location()\n            status = response.status\n    \n        else:\n            # Incrementing because of a server error like a 500 in\n            # status_forcelist and the given method is in the allowed_methods\n            cause = ResponseError.GENERIC_ERROR\n            if response and response.status:\n                if status_count is not None:\n                    status_count -= 1\n                cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status)\n                status = response.status\n    \n        history = self.history + (\n            RequestHistory(method, url, error, status, redirect_location),\n        )\n    \n        new_retry = self.new(\n            total=total,\n            connect=connect,\n            read=read,\n            redirect=redirect,\n            status=status_count,\n            other=other,\n            history=history,\n        )\n    \n        if new_retry.is_exhausted():\n&amp;gt;           raise MaxRetryError(_pool, url, error or ResponseError(cause))\nE           urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927817E90&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\retry.py:592: MaxRetryError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;scripts.test_ihrm_login_params.TestIhrmLoginParams object at 0x00000239272AF2D0&amp;gt;, desc = &amp;#x27;\u5bc6\u7801\u9519\u8bef&amp;#x27;, req_data = {&amp;#x27;mobile&amp;#x27;: &amp;#x27;13800000002&amp;#x27;, &amp;#x27;password&amp;#x27;: &amp;#x27;123456890&amp;#x27;}\nstatus_code = 200, success = False, code = 20001, message = &amp;#x27;\u7528\u6237\u540d\u6216\u5bc6\u7801\u9519\u8bef&amp;#x27;\n\n    @pytest.mark.parametrize(&amp;quot;desc, req_data, status_code, success, code, message&amp;quot;, data)\n    # \u5b9a\u4e49 \u901a\u7528\u6d4b\u8bd5\u65b9\u6cd5 - \u6d4b\u8bd5ihrm\u767b\u5f55\u63a5\u53e3\n    def test_ihrm_login(self, desc, req_data, status_code, success, code, message):\n        # \u8c03\u7528 \u81ea\u5df1\u5c01\u88c5\u7684 api\uff0c \u83b7\u53d6\u54cd\u5e94\u7ed3\u679c\n&amp;gt;       resp = IhrmLoginApi.login(req_data)\n\nscripts\\test_ihrm_login_params.py:20: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\napi\\ihrm_login_api.py:12: in login\n    resp = requests.post(url=&amp;quot;http://ihrm-test.itheima.net/api/sys/login&amp;quot;, json=req_data)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:115: in post\n    return request(&amp;quot;post&amp;quot;, url, data=data, json=json, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:59: in request\n    return session.request(method=method, url=url, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:587: in request\n    resp = self.send(prep, **send_kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:701: in send\n    r = adapter.send(request, **kwargs)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927814850&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n                resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n    \n            # Send the request.\n            else:\n                if hasattr(conn, &amp;quot;proxy_pool&amp;quot;):\n                    conn = conn.proxy_pool\n    \n                low_conn = conn._get_conn(timeout=DEFAULT_POOL_TIMEOUT)\n    \n                try:\n                    skip_host = &amp;quot;Host&amp;quot; in request.headers\n                    low_conn.putrequest(\n                        request.method,\n                        url,\n                        skip_accept_encoding=True,\n                        skip_host=skip_host,\n                    )\n    \n                    for header, value in request.headers.items():\n                        low_conn.putheader(header, value)\n    \n                    low_conn.endheaders()\n    \n                    for i in request.body:\n                        low_conn.send(hex(len(i))[2:].encode(&amp;quot;utf-8&amp;quot;))\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                        low_conn.send(i)\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                    low_conn.send(b&amp;quot;0\\r\\n\\r\\n&amp;quot;)\n    \n                    # Receive the response from the server\n                    r = low_conn.getresponse()\n    \n                    resp = HTTPResponse.from_httplib(\n                        r,\n                        pool=conn,\n                        connection=low_conn,\n                        preload_content=False,\n                        decode_content=False,\n                    )\n                except Exception:\n                    # If we hit any problems here, clean up the connection.\n                    # Then, raise so that we can handle the actual exception.\n                    low_conn.close()\n                    raise\n    \n        except (ProtocolError, OSError) as err:\n            raise ConnectionError(err, request=request)\n    \n        except MaxRetryError as e:\n            if isinstance(e.reason, ConnectTimeoutError):\n                # TODO: Remove this in 3.0.0: see #2811\n                if not isinstance(e.reason, NewConnectionError):\n                    raise ConnectTimeout(e, request=request)\n    \n            if isinstance(e.reason, ResponseError):\n                raise RetryError(e, request=request)\n    \n            if isinstance(e.reason, _ProxyError):\n                raise ProxyError(e, request=request)\n    \n            if isinstance(e.reason, _SSLError):\n                # This branch is for urllib3 v1.22 and later.\n                raise SSLError(e, request=request)\n    \n&amp;gt;           raise ConnectionError(e, request=request)\nE           requests.exceptions.ConnectionError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927817E90&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:565: ConnectionError\n\n------------------------------ Captured log call -------------------------------\nDEBUG    urllib3.connectionpool:connectionpool.py:228 Starting new HTTP connection (1): ihrm-test.itheima.net:80\n\n&#34;}], &#34;scripts/test_ihrm_login_params.py::TestIhrmLoginParams::test_ihrm_login[\\u624b\\u673a\\u53f7\\u4e3a\\u7a7a-req_data3-200-False-20001-\\u7528\\u6237\\u540d\\u6216\\u5bc6\\u7801\\u9519\\u8bef]&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Failed&#34;, &#34;testId&#34;: &#34;scripts/test_ihrm_login_params.py::TestIhrmLoginParams::test_ihrm_login[\\u624b\\u673a\\u53f7\\u4e3a\\u7a7a-req_data3-200-False-20001-\\u7528\\u6237\\u540d\\u6216\\u5bc6\\u7801\\u9519\\u8bef]&#34;, &#34;duration&#34;: &#34;48 ms&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Failed&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;scripts/test_ihrm_login_params.py::TestIhrmLoginParams::test_ihrm_login[\\u624b\\u673a\\u53f7\\u4e3a\\u7a7a-req_data3-200-False-20001-\\u7528\\u6237\\u540d\\u6216\\u5bc6\\u7801\\u9519\\u8bef]&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;48 ms&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;self = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927B04410&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n&amp;gt;           conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:174: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\connection.py:72: in create_connection\n    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nhost = &amp;#x27;ihrm-test.itheima.net&amp;#x27;, port = 80, family = &amp;lt;AddressFamily.AF_UNSPEC: 0&amp;gt;, type = &amp;lt;SocketKind.SOCK_STREAM: 1&amp;gt;, proto = 0, flags = 0\n\n    def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):\n        &amp;quot;&amp;quot;&amp;quot;Resolve host and port into list of address info entries.\n    \n        Translate the host/port argument into a sequence of 5-tuples that contain\n        all the necessary arguments for creating a socket connected to that service.\n        host is a domain name, a string representation of an IPv4/v6 address or\n        None. port is a string service name such as &amp;#x27;http&amp;#x27;, a numeric port number or\n        None. By passing None as the value of host and port, you can pass NULL to\n        the underlying C API.\n    \n        The family, type and proto arguments can be optionally specified in order to\n        narrow the list of addresses returned. Passing zero as a value for each of\n        these arguments selects the full range of results.\n        &amp;quot;&amp;quot;&amp;quot;\n        # We override this function since we want to translate the numeric family\n        # and socket type values to enum constants.\n        addrlist = []\n&amp;gt;       for res in _socket.getaddrinfo(host, port, family, type, proto, flags):\nE       socket.gaierror: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\socket.py:962: gaierror\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927B05490&amp;gt;, method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, body = b&amp;#x27;{&amp;quot;mobile&amp;quot;: null, &amp;quot;password&amp;quot;: &amp;quot;123456&amp;quot;}&amp;#x27;\nheaders = {&amp;#x27;User-Agent&amp;#x27;: &amp;#x27;python-requests/2.28.1&amp;#x27;, &amp;#x27;Accept-Encoding&amp;#x27;: &amp;#x27;gzip, deflate&amp;#x27;, &amp;#x27;Accept&amp;#x27;: &amp;#x27;*/*&amp;#x27;, &amp;#x27;Connection&amp;#x27;: &amp;#x27;keep-alive&amp;#x27;, &amp;#x27;Content-Length&amp;#x27;: &amp;#x27;38&amp;#x27;, &amp;#x27;Content-Type&amp;#x27;: &amp;#x27;application/json&amp;#x27;}\nretries = Retry(total=0, connect=None, read=False, redirect=None, status=None), redirect = False, assert_same_host = False, timeout = Timeout(connect=None, read=None, total=None)\npool_timeout = None, release_conn = False, chunked = False, body_pos = None, response_kw = {&amp;#x27;decode_content&amp;#x27;: False, &amp;#x27;preload_content&amp;#x27;: False}\nparsed_url = Url(scheme=None, auth=None, host=None, port=None, path=&amp;#x27;/api/sys/login&amp;#x27;, query=None, fragment=None), destination_scheme = None, conn = None, release_this_conn = True\nhttp_tunnel_required = False, err = None, clean_exit = False\n\n    def urlopen(\n        self,\n        method,\n        url,\n        body=None,\n        headers=None,\n        retries=None,\n        redirect=True,\n        assert_same_host=True,\n        timeout=_Default,\n        pool_timeout=None,\n        release_conn=None,\n        chunked=False,\n        body_pos=None,\n        **response_kw\n    ):\n        &amp;quot;&amp;quot;&amp;quot;\n        Get a connection from the pool and perform an HTTP request. This is the\n        lowest level call for making a request, so you&amp;#x27;ll need to specify all\n        the raw details.\n    \n        .. note::\n    \n           More commonly, it&amp;#x27;s appropriate to use a convenience method provided\n           by :class:`.RequestMethods`, such as :meth:`request`.\n    \n        .. note::\n    \n           `release_conn` will only behave as expected if\n           `preload_content=False` because we want to make\n           `preload_content=False` the default behaviour someday soon without\n           breaking backwards compatibility.\n    \n        :param method:\n            HTTP request method (such as GET, POST, PUT, etc.)\n    \n        :param url:\n            The URL to perform the request on.\n    \n        :param body:\n            Data to send in the request body, either :class:`str`, :class:`bytes`,\n            an iterable of :class:`str`/:class:`bytes`, or a file-like object.\n    \n        :param headers:\n            Dictionary of custom headers to send, such as User-Agent,\n            If-None-Match, etc. If None, pool headers are used. If provided,\n            these headers completely replace any pool-specific headers.\n    \n        :param retries:\n            Configure the number of retries to allow before raising a\n            :class:`~urllib3.exceptions.MaxRetryError` exception.\n    \n            Pass ``None`` to retry until you receive a response. Pass a\n            :class:`~urllib3.util.retry.Retry` object for fine-grained control\n            over different types of retries.\n            Pass an integer number to retry connection errors that many times,\n            but no other types of errors. Pass zero to never retry.\n    \n            If ``False``, then retries are disabled and any exception is raised\n            immediately. Also, instead of raising a MaxRetryError on redirects,\n            the redirect response will be returned.\n    \n        :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.\n    \n        :param redirect:\n            If True, automatically handle redirects (status codes 301, 302,\n            303, 307, 308). Each redirect counts as a retry. Disabling retries\n            will disable redirect, too.\n    \n        :param assert_same_host:\n            If ``True``, will make sure that the host of the pool requests is\n            consistent else will raise HostChangedError. When ``False``, you can\n            use the pool on an HTTP proxy and request foreign hosts.\n    \n        :param timeout:\n            If specified, overrides the default timeout for this one\n            request. It may be a float (in seconds) or an instance of\n            :class:`urllib3.util.Timeout`.\n    \n        :param pool_timeout:\n            If set and the pool is set to block=True, then this method will\n            block for ``pool_timeout`` seconds and raise EmptyPoolError if no\n            connection is available within the time period.\n    \n        :param release_conn:\n            If False, then the urlopen call will not release the connection\n            back into the pool once a response is received (but will release if\n            you read the entire contents of the response such as when\n            `preload_content=True`). This is useful if you&amp;#x27;re not preloading\n            the response&amp;#x27;s content immediately. You will need to call\n            ``r.release_conn()`` on the response ``r`` to return the connection\n            back into the pool. If None, it takes the value of\n            ``response_kw.get(&amp;#x27;preload_content&amp;#x27;, True)``.\n    \n        :param chunked:\n            If True, urllib3 will send the body using chunked transfer\n            encoding. Otherwise, urllib3 will send the body using the standard\n            content-length form. Defaults to False.\n    \n        :param int body_pos:\n            Position to seek to in file-like body in the event of a retry or\n            redirect. Typically this won&amp;#x27;t need to be set because urllib3 will\n            auto-populate the value when needed.\n    \n        :param \\\\**response_kw:\n            Additional parameters are passed to\n            :meth:`urllib3.response.HTTPResponse.from_httplib`\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        parsed_url = parse_url(url)\n        destination_scheme = parsed_url.scheme\n    \n        if headers is None:\n            headers = self.headers\n    \n        if not isinstance(retries, Retry):\n            retries = Retry.from_int(retries, redirect=redirect, default=self.retries)\n    \n        if release_conn is None:\n            release_conn = response_kw.get(&amp;quot;preload_content&amp;quot;, True)\n    \n        # Check host\n        if assert_same_host and not self.is_same_host(url):\n            raise HostChangedError(self, url, retries)\n    \n        # Ensure that the URL we&amp;#x27;re connecting to is properly encoded\n        if url.startswith(&amp;quot;/&amp;quot;):\n            url = six.ensure_str(_encode_target(url))\n        else:\n            url = six.ensure_str(parsed_url.url)\n    \n        conn = None\n    \n        # Track whether `conn` needs to be released before\n        # returning/raising/recursing. Update this variable if necessary, and\n        # leave `release_conn` constant throughout the function. That way, if\n        # the function recurses, the original value of `release_conn` will be\n        # passed down into the recursive call, and its value will be respected.\n        #\n        # See issue #651 [1] for details.\n        #\n        # [1] &amp;lt;https://github.com/urllib3/urllib3/issues/651&amp;gt;\n        release_this_conn = release_conn\n    \n        http_tunnel_required = connection_requires_http_tunnel(\n            self.proxy, self.proxy_config, destination_scheme\n        )\n    \n        # Merge the proxy headers. Only done when not using HTTP CONNECT. We\n        # have to copy the headers dict so we can safely change it without those\n        # changes being reflected in anyone else&amp;#x27;s copy.\n        if not http_tunnel_required:\n            headers = headers.copy()\n            headers.update(self.proxy_headers)\n    \n        # Must keep the exception bound to a separate variable or else Python 3\n        # complains about UnboundLocalError.\n        err = None\n    \n        # Keep track of whether we cleanly exited the except block. This\n        # ensures we do proper cleanup in finally.\n        clean_exit = False\n    \n        # Rewind body position, if needed. Record current position\n        # for future rewinds in the event of a redirect/retry.\n        body_pos = set_file_position(body, body_pos)\n    \n        try:\n            # Request a connection from the queue.\n            timeout_obj = self._get_timeout(timeout)\n            conn = self._get_conn(timeout=pool_timeout)\n    \n            conn.timeout = timeout_obj.connect_timeout\n    \n            is_new_proxy_conn = self.proxy is not None and not getattr(\n                conn, &amp;quot;sock&amp;quot;, None\n            )\n            if is_new_proxy_conn and http_tunnel_required:\n                self._prepare_proxy(conn)\n    \n            # Make the request on the httplib connection object.\n&amp;gt;           httplib_response = self._make_request(\n                conn,\n                method,\n                url,\n                timeout=timeout_obj,\n                body=body,\n                headers=headers,\n                chunked=chunked,\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:703: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:398: in _make_request\n    conn.request(method, url, **httplib_request_kw)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:239: in request\n    super(HTTPConnection, self).request(method, url, body=body, headers=headers)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1282: in request\n    self._send_request(method, url, body, headers, encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1328: in _send_request\n    self.endheaders(body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1277: in endheaders\n    self._send_output(message_body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1037: in _send_output\n    self.send(msg)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:975: in send\n    self.connect()\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:205: in connect\n    conn = self._new_conn()\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927B04410&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n            conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n    \n        except SocketTimeout:\n            raise ConnectTimeoutError(\n                self,\n                &amp;quot;Connection to %s timed out. (connect timeout=%s)&amp;quot;\n                % (self.host, self.timeout),\n            )\n    \n        except SocketError as e:\n&amp;gt;           raise NewConnectionError(\n                self, &amp;quot;Failed to establish a new connection: %s&amp;quot; % e\n            )\nE           urllib3.exceptions.NewConnectionError: &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927B04410&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:186: NewConnectionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927B07390&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n&amp;gt;               resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:489: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:787: in urlopen\n    retries = retries.increment(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = Retry(total=0, connect=None, read=False, redirect=None, status=None), method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, response = None\nerror = NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927B04410&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;)\n_pool = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927B05490&amp;gt;, _stacktrace = &amp;lt;traceback object at 0x0000023927B05F40&amp;gt;\n\n    def increment(\n        self,\n        method=None,\n        url=None,\n        response=None,\n        error=None,\n        _pool=None,\n        _stacktrace=None,\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Return a new Retry object with incremented retry counters.\n    \n        :param response: A response object, or None, if the server did not\n            return a response.\n        :type response: :class:`~urllib3.response.HTTPResponse`\n        :param Exception error: An error encountered during the request, or\n            None if the response was received successfully.\n    \n        :return: A new ``Retry`` object.\n        &amp;quot;&amp;quot;&amp;quot;\n        if self.total is False and error:\n            # Disabled, indicate to re-raise the error.\n            raise six.reraise(type(error), error, _stacktrace)\n    \n        total = self.total\n        if total is not None:\n            total -= 1\n    \n        connect = self.connect\n        read = self.read\n        redirect = self.redirect\n        status_count = self.status\n        other = self.other\n        cause = &amp;quot;unknown&amp;quot;\n        status = None\n        redirect_location = None\n    \n        if error and self._is_connection_error(error):\n            # Connect retry?\n            if connect is False:\n                raise six.reraise(type(error), error, _stacktrace)\n            elif connect is not None:\n                connect -= 1\n    \n        elif error and self._is_read_error(error):\n            # Read retry?\n            if read is False or not self._is_method_retryable(method):\n                raise six.reraise(type(error), error, _stacktrace)\n            elif read is not None:\n                read -= 1\n    \n        elif error:\n            # Other retry?\n            if other is not None:\n                other -= 1\n    \n        elif response and response.get_redirect_location():\n            # Redirect retry?\n            if redirect is not None:\n                redirect -= 1\n            cause = &amp;quot;too many redirects&amp;quot;\n            redirect_location = response.get_redirect_location()\n            status = response.status\n    \n        else:\n            # Incrementing because of a server error like a 500 in\n            # status_forcelist and the given method is in the allowed_methods\n            cause = ResponseError.GENERIC_ERROR\n            if response and response.status:\n                if status_count is not None:\n                    status_count -= 1\n                cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status)\n                status = response.status\n    \n        history = self.history + (\n            RequestHistory(method, url, error, status, redirect_location),\n        )\n    \n        new_retry = self.new(\n            total=total,\n            connect=connect,\n            read=read,\n            redirect=redirect,\n            status=status_count,\n            other=other,\n            history=history,\n        )\n    \n        if new_retry.is_exhausted():\n&amp;gt;           raise MaxRetryError(_pool, url, error or ResponseError(cause))\nE           urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927B04410&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\retry.py:592: MaxRetryError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;scripts.test_ihrm_login_params.TestIhrmLoginParams object at 0x00000239272AF410&amp;gt;, desc = &amp;#x27;\u624b\u673a\u53f7\u4e3a\u7a7a&amp;#x27;, req_data = {&amp;#x27;mobile&amp;#x27;: None, &amp;#x27;password&amp;#x27;: &amp;#x27;123456&amp;#x27;}, status_code = 200\nsuccess = False, code = 20001, message = &amp;#x27;\u7528\u6237\u540d\u6216\u5bc6\u7801\u9519\u8bef&amp;#x27;\n\n    @pytest.mark.parametrize(&amp;quot;desc, req_data, status_code, success, code, message&amp;quot;, data)\n    # \u5b9a\u4e49 \u901a\u7528\u6d4b\u8bd5\u65b9\u6cd5 - \u6d4b\u8bd5ihrm\u767b\u5f55\u63a5\u53e3\n    def test_ihrm_login(self, desc, req_data, status_code, success, code, message):\n        # \u8c03\u7528 \u81ea\u5df1\u5c01\u88c5\u7684 api\uff0c \u83b7\u53d6\u54cd\u5e94\u7ed3\u679c\n&amp;gt;       resp = IhrmLoginApi.login(req_data)\n\nscripts\\test_ihrm_login_params.py:20: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\napi\\ihrm_login_api.py:12: in login\n    resp = requests.post(url=&amp;quot;http://ihrm-test.itheima.net/api/sys/login&amp;quot;, json=req_data)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:115: in post\n    return request(&amp;quot;post&amp;quot;, url, data=data, json=json, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:59: in request\n    return session.request(method=method, url=url, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:587: in request\n    resp = self.send(prep, **send_kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:701: in send\n    r = adapter.send(request, **kwargs)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927B07390&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n                resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n    \n            # Send the request.\n            else:\n                if hasattr(conn, &amp;quot;proxy_pool&amp;quot;):\n                    conn = conn.proxy_pool\n    \n                low_conn = conn._get_conn(timeout=DEFAULT_POOL_TIMEOUT)\n    \n                try:\n                    skip_host = &amp;quot;Host&amp;quot; in request.headers\n                    low_conn.putrequest(\n                        request.method,\n                        url,\n                        skip_accept_encoding=True,\n                        skip_host=skip_host,\n                    )\n    \n                    for header, value in request.headers.items():\n                        low_conn.putheader(header, value)\n    \n                    low_conn.endheaders()\n    \n                    for i in request.body:\n                        low_conn.send(hex(len(i))[2:].encode(&amp;quot;utf-8&amp;quot;))\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                        low_conn.send(i)\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                    low_conn.send(b&amp;quot;0\\r\\n\\r\\n&amp;quot;)\n    \n                    # Receive the response from the server\n                    r = low_conn.getresponse()\n    \n                    resp = HTTPResponse.from_httplib(\n                        r,\n                        pool=conn,\n                        connection=low_conn,\n                        preload_content=False,\n                        decode_content=False,\n                    )\n                except Exception:\n                    # If we hit any problems here, clean up the connection.\n                    # Then, raise so that we can handle the actual exception.\n                    low_conn.close()\n                    raise\n    \n        except (ProtocolError, OSError) as err:\n            raise ConnectionError(err, request=request)\n    \n        except MaxRetryError as e:\n            if isinstance(e.reason, ConnectTimeoutError):\n                # TODO: Remove this in 3.0.0: see #2811\n                if not isinstance(e.reason, NewConnectionError):\n                    raise ConnectTimeout(e, request=request)\n    \n            if isinstance(e.reason, ResponseError):\n                raise RetryError(e, request=request)\n    \n            if isinstance(e.reason, _ProxyError):\n                raise ProxyError(e, request=request)\n    \n            if isinstance(e.reason, _SSLError):\n                # This branch is for urllib3 v1.22 and later.\n                raise SSLError(e, request=request)\n    \n&amp;gt;           raise ConnectionError(e, request=request)\nE           requests.exceptions.ConnectionError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927B04410&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:565: ConnectionError\n\n------------------------------ Captured log call -------------------------------\nDEBUG    urllib3.connectionpool:connectionpool.py:228 Starting new HTTP connection (1): ihrm-test.itheima.net:80\n\n&#34;}], &#34;scripts/test_ihrm_login_params.py::TestIhrmLoginParams::test_ihrm_login[\\u624b\\u673a\\u53f7\\u6709\\u7279\\u6b8a\\u5b57\\u7b26-req_data4-200-False-20001-\\u7528\\u6237\\u540d\\u6216\\u5bc6\\u7801\\u9519\\u8bef]&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Failed&#34;, &#34;testId&#34;: &#34;scripts/test_ihrm_login_params.py::TestIhrmLoginParams::test_ihrm_login[\\u624b\\u673a\\u53f7\\u6709\\u7279\\u6b8a\\u5b57\\u7b26-req_data4-200-False-20001-\\u7528\\u6237\\u540d\\u6216\\u5bc6\\u7801\\u9519\\u8bef]&#34;, &#34;duration&#34;: &#34;35 ms&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Failed&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;scripts/test_ihrm_login_params.py::TestIhrmLoginParams::test_ihrm_login[\\u624b\\u673a\\u53f7\\u6709\\u7279\\u6b8a\\u5b57\\u7b26-req_data4-200-False-20001-\\u7528\\u6237\\u540d\\u6216\\u5bc6\\u7801\\u9519\\u8bef]&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;35 ms&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;self = &amp;lt;urllib3.connection.HTTPConnection object at 0x00000239278B31D0&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n&amp;gt;           conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:174: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\connection.py:72: in create_connection\n    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nhost = &amp;#x27;ihrm-test.itheima.net&amp;#x27;, port = 80, family = &amp;lt;AddressFamily.AF_UNSPEC: 0&amp;gt;, type = &amp;lt;SocketKind.SOCK_STREAM: 1&amp;gt;, proto = 0, flags = 0\n\n    def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):\n        &amp;quot;&amp;quot;&amp;quot;Resolve host and port into list of address info entries.\n    \n        Translate the host/port argument into a sequence of 5-tuples that contain\n        all the necessary arguments for creating a socket connected to that service.\n        host is a domain name, a string representation of an IPv4/v6 address or\n        None. port is a string service name such as &amp;#x27;http&amp;#x27;, a numeric port number or\n        None. By passing None as the value of host and port, you can pass NULL to\n        the underlying C API.\n    \n        The family, type and proto arguments can be optionally specified in order to\n        narrow the list of addresses returned. Passing zero as a value for each of\n        these arguments selects the full range of results.\n        &amp;quot;&amp;quot;&amp;quot;\n        # We override this function since we want to translate the numeric family\n        # and socket type values to enum constants.\n        addrlist = []\n&amp;gt;       for res in _socket.getaddrinfo(host, port, family, type, proto, flags):\nE       socket.gaierror: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\socket.py:962: gaierror\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x00000239278B1350&amp;gt;, method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, body = b&amp;#x27;{&amp;quot;mobile&amp;quot;: &amp;quot;1380abc#002&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;123456&amp;quot;}&amp;#x27;\nheaders = {&amp;#x27;User-Agent&amp;#x27;: &amp;#x27;python-requests/2.28.1&amp;#x27;, &amp;#x27;Accept-Encoding&amp;#x27;: &amp;#x27;gzip, deflate&amp;#x27;, &amp;#x27;Accept&amp;#x27;: &amp;#x27;*/*&amp;#x27;, &amp;#x27;Connection&amp;#x27;: &amp;#x27;keep-alive&amp;#x27;, &amp;#x27;Content-Length&amp;#x27;: &amp;#x27;47&amp;#x27;, &amp;#x27;Content-Type&amp;#x27;: &amp;#x27;application/json&amp;#x27;}\nretries = Retry(total=0, connect=None, read=False, redirect=None, status=None), redirect = False, assert_same_host = False, timeout = Timeout(connect=None, read=None, total=None)\npool_timeout = None, release_conn = False, chunked = False, body_pos = None, response_kw = {&amp;#x27;decode_content&amp;#x27;: False, &amp;#x27;preload_content&amp;#x27;: False}\nparsed_url = Url(scheme=None, auth=None, host=None, port=None, path=&amp;#x27;/api/sys/login&amp;#x27;, query=None, fragment=None), destination_scheme = None, conn = None, release_this_conn = True\nhttp_tunnel_required = False, err = None, clean_exit = False\n\n    def urlopen(\n        self,\n        method,\n        url,\n        body=None,\n        headers=None,\n        retries=None,\n        redirect=True,\n        assert_same_host=True,\n        timeout=_Default,\n        pool_timeout=None,\n        release_conn=None,\n        chunked=False,\n        body_pos=None,\n        **response_kw\n    ):\n        &amp;quot;&amp;quot;&amp;quot;\n        Get a connection from the pool and perform an HTTP request. This is the\n        lowest level call for making a request, so you&amp;#x27;ll need to specify all\n        the raw details.\n    \n        .. note::\n    \n           More commonly, it&amp;#x27;s appropriate to use a convenience method provided\n           by :class:`.RequestMethods`, such as :meth:`request`.\n    \n        .. note::\n    \n           `release_conn` will only behave as expected if\n           `preload_content=False` because we want to make\n           `preload_content=False` the default behaviour someday soon without\n           breaking backwards compatibility.\n    \n        :param method:\n            HTTP request method (such as GET, POST, PUT, etc.)\n    \n        :param url:\n            The URL to perform the request on.\n    \n        :param body:\n            Data to send in the request body, either :class:`str`, :class:`bytes`,\n            an iterable of :class:`str`/:class:`bytes`, or a file-like object.\n    \n        :param headers:\n            Dictionary of custom headers to send, such as User-Agent,\n            If-None-Match, etc. If None, pool headers are used. If provided,\n            these headers completely replace any pool-specific headers.\n    \n        :param retries:\n            Configure the number of retries to allow before raising a\n            :class:`~urllib3.exceptions.MaxRetryError` exception.\n    \n            Pass ``None`` to retry until you receive a response. Pass a\n            :class:`~urllib3.util.retry.Retry` object for fine-grained control\n            over different types of retries.\n            Pass an integer number to retry connection errors that many times,\n            but no other types of errors. Pass zero to never retry.\n    \n            If ``False``, then retries are disabled and any exception is raised\n            immediately. Also, instead of raising a MaxRetryError on redirects,\n            the redirect response will be returned.\n    \n        :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.\n    \n        :param redirect:\n            If True, automatically handle redirects (status codes 301, 302,\n            303, 307, 308). Each redirect counts as a retry. Disabling retries\n            will disable redirect, too.\n    \n        :param assert_same_host:\n            If ``True``, will make sure that the host of the pool requests is\n            consistent else will raise HostChangedError. When ``False``, you can\n            use the pool on an HTTP proxy and request foreign hosts.\n    \n        :param timeout:\n            If specified, overrides the default timeout for this one\n            request. It may be a float (in seconds) or an instance of\n            :class:`urllib3.util.Timeout`.\n    \n        :param pool_timeout:\n            If set and the pool is set to block=True, then this method will\n            block for ``pool_timeout`` seconds and raise EmptyPoolError if no\n            connection is available within the time period.\n    \n        :param release_conn:\n            If False, then the urlopen call will not release the connection\n            back into the pool once a response is received (but will release if\n            you read the entire contents of the response such as when\n            `preload_content=True`). This is useful if you&amp;#x27;re not preloading\n            the response&amp;#x27;s content immediately. You will need to call\n            ``r.release_conn()`` on the response ``r`` to return the connection\n            back into the pool. If None, it takes the value of\n            ``response_kw.get(&amp;#x27;preload_content&amp;#x27;, True)``.\n    \n        :param chunked:\n            If True, urllib3 will send the body using chunked transfer\n            encoding. Otherwise, urllib3 will send the body using the standard\n            content-length form. Defaults to False.\n    \n        :param int body_pos:\n            Position to seek to in file-like body in the event of a retry or\n            redirect. Typically this won&amp;#x27;t need to be set because urllib3 will\n            auto-populate the value when needed.\n    \n        :param \\\\**response_kw:\n            Additional parameters are passed to\n            :meth:`urllib3.response.HTTPResponse.from_httplib`\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        parsed_url = parse_url(url)\n        destination_scheme = parsed_url.scheme\n    \n        if headers is None:\n            headers = self.headers\n    \n        if not isinstance(retries, Retry):\n            retries = Retry.from_int(retries, redirect=redirect, default=self.retries)\n    \n        if release_conn is None:\n            release_conn = response_kw.get(&amp;quot;preload_content&amp;quot;, True)\n    \n        # Check host\n        if assert_same_host and not self.is_same_host(url):\n            raise HostChangedError(self, url, retries)\n    \n        # Ensure that the URL we&amp;#x27;re connecting to is properly encoded\n        if url.startswith(&amp;quot;/&amp;quot;):\n            url = six.ensure_str(_encode_target(url))\n        else:\n            url = six.ensure_str(parsed_url.url)\n    \n        conn = None\n    \n        # Track whether `conn` needs to be released before\n        # returning/raising/recursing. Update this variable if necessary, and\n        # leave `release_conn` constant throughout the function. That way, if\n        # the function recurses, the original value of `release_conn` will be\n        # passed down into the recursive call, and its value will be respected.\n        #\n        # See issue #651 [1] for details.\n        #\n        # [1] &amp;lt;https://github.com/urllib3/urllib3/issues/651&amp;gt;\n        release_this_conn = release_conn\n    \n        http_tunnel_required = connection_requires_http_tunnel(\n            self.proxy, self.proxy_config, destination_scheme\n        )\n    \n        # Merge the proxy headers. Only done when not using HTTP CONNECT. We\n        # have to copy the headers dict so we can safely change it without those\n        # changes being reflected in anyone else&amp;#x27;s copy.\n        if not http_tunnel_required:\n            headers = headers.copy()\n            headers.update(self.proxy_headers)\n    \n        # Must keep the exception bound to a separate variable or else Python 3\n        # complains about UnboundLocalError.\n        err = None\n    \n        # Keep track of whether we cleanly exited the except block. This\n        # ensures we do proper cleanup in finally.\n        clean_exit = False\n    \n        # Rewind body position, if needed. Record current position\n        # for future rewinds in the event of a redirect/retry.\n        body_pos = set_file_position(body, body_pos)\n    \n        try:\n            # Request a connection from the queue.\n            timeout_obj = self._get_timeout(timeout)\n            conn = self._get_conn(timeout=pool_timeout)\n    \n            conn.timeout = timeout_obj.connect_timeout\n    \n            is_new_proxy_conn = self.proxy is not None and not getattr(\n                conn, &amp;quot;sock&amp;quot;, None\n            )\n            if is_new_proxy_conn and http_tunnel_required:\n                self._prepare_proxy(conn)\n    \n            # Make the request on the httplib connection object.\n&amp;gt;           httplib_response = self._make_request(\n                conn,\n                method,\n                url,\n                timeout=timeout_obj,\n                body=body,\n                headers=headers,\n                chunked=chunked,\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:703: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:398: in _make_request\n    conn.request(method, url, **httplib_request_kw)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:239: in request\n    super(HTTPConnection, self).request(method, url, body=body, headers=headers)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1282: in request\n    self._send_request(method, url, body, headers, encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1328: in _send_request\n    self.endheaders(body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1277: in endheaders\n    self._send_output(message_body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1037: in _send_output\n    self.send(msg)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:975: in send\n    self.connect()\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:205: in connect\n    conn = self._new_conn()\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;urllib3.connection.HTTPConnection object at 0x00000239278B31D0&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n            conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n    \n        except SocketTimeout:\n            raise ConnectTimeoutError(\n                self,\n                &amp;quot;Connection to %s timed out. (connect timeout=%s)&amp;quot;\n                % (self.host, self.timeout),\n            )\n    \n        except SocketError as e:\n&amp;gt;           raise NewConnectionError(\n                self, &amp;quot;Failed to establish a new connection: %s&amp;quot; % e\n            )\nE           urllib3.exceptions.NewConnectionError: &amp;lt;urllib3.connection.HTTPConnection object at 0x00000239278B31D0&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:186: NewConnectionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927A1DD10&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n&amp;gt;               resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:489: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:787: in urlopen\n    retries = retries.increment(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = Retry(total=0, connect=None, read=False, redirect=None, status=None), method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, response = None\nerror = NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x00000239278B31D0&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;)\n_pool = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x00000239278B1350&amp;gt;, _stacktrace = &amp;lt;traceback object at 0x00000239278B02C0&amp;gt;\n\n    def increment(\n        self,\n        method=None,\n        url=None,\n        response=None,\n        error=None,\n        _pool=None,\n        _stacktrace=None,\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Return a new Retry object with incremented retry counters.\n    \n        :param response: A response object, or None, if the server did not\n            return a response.\n        :type response: :class:`~urllib3.response.HTTPResponse`\n        :param Exception error: An error encountered during the request, or\n            None if the response was received successfully.\n    \n        :return: A new ``Retry`` object.\n        &amp;quot;&amp;quot;&amp;quot;\n        if self.total is False and error:\n            # Disabled, indicate to re-raise the error.\n            raise six.reraise(type(error), error, _stacktrace)\n    \n        total = self.total\n        if total is not None:\n            total -= 1\n    \n        connect = self.connect\n        read = self.read\n        redirect = self.redirect\n        status_count = self.status\n        other = self.other\n        cause = &amp;quot;unknown&amp;quot;\n        status = None\n        redirect_location = None\n    \n        if error and self._is_connection_error(error):\n            # Connect retry?\n            if connect is False:\n                raise six.reraise(type(error), error, _stacktrace)\n            elif connect is not None:\n                connect -= 1\n    \n        elif error and self._is_read_error(error):\n            # Read retry?\n            if read is False or not self._is_method_retryable(method):\n                raise six.reraise(type(error), error, _stacktrace)\n            elif read is not None:\n                read -= 1\n    \n        elif error:\n            # Other retry?\n            if other is not None:\n                other -= 1\n    \n        elif response and response.get_redirect_location():\n            # Redirect retry?\n            if redirect is not None:\n                redirect -= 1\n            cause = &amp;quot;too many redirects&amp;quot;\n            redirect_location = response.get_redirect_location()\n            status = response.status\n    \n        else:\n            # Incrementing because of a server error like a 500 in\n            # status_forcelist and the given method is in the allowed_methods\n            cause = ResponseError.GENERIC_ERROR\n            if response and response.status:\n                if status_count is not None:\n                    status_count -= 1\n                cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status)\n                status = response.status\n    \n        history = self.history + (\n            RequestHistory(method, url, error, status, redirect_location),\n        )\n    \n        new_retry = self.new(\n            total=total,\n            connect=connect,\n            read=read,\n            redirect=redirect,\n            status=status_count,\n            other=other,\n            history=history,\n        )\n    \n        if new_retry.is_exhausted():\n&amp;gt;           raise MaxRetryError(_pool, url, error or ResponseError(cause))\nE           urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x00000239278B31D0&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\retry.py:592: MaxRetryError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;scripts.test_ihrm_login_params.TestIhrmLoginParams object at 0x00000239272AF550&amp;gt;, desc = &amp;#x27;\u624b\u673a\u53f7\u6709\u7279\u6b8a\u5b57\u7b26&amp;#x27;, req_data = {&amp;#x27;mobile&amp;#x27;: &amp;#x27;1380abc#002&amp;#x27;, &amp;#x27;password&amp;#x27;: &amp;#x27;123456&amp;#x27;}\nstatus_code = 200, success = False, code = 20001, message = &amp;#x27;\u7528\u6237\u540d\u6216\u5bc6\u7801\u9519\u8bef&amp;#x27;\n\n    @pytest.mark.parametrize(&amp;quot;desc, req_data, status_code, success, code, message&amp;quot;, data)\n    # \u5b9a\u4e49 \u901a\u7528\u6d4b\u8bd5\u65b9\u6cd5 - \u6d4b\u8bd5ihrm\u767b\u5f55\u63a5\u53e3\n    def test_ihrm_login(self, desc, req_data, status_code, success, code, message):\n        # \u8c03\u7528 \u81ea\u5df1\u5c01\u88c5\u7684 api\uff0c \u83b7\u53d6\u54cd\u5e94\u7ed3\u679c\n&amp;gt;       resp = IhrmLoginApi.login(req_data)\n\nscripts\\test_ihrm_login_params.py:20: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\napi\\ihrm_login_api.py:12: in login\n    resp = requests.post(url=&amp;quot;http://ihrm-test.itheima.net/api/sys/login&amp;quot;, json=req_data)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:115: in post\n    return request(&amp;quot;post&amp;quot;, url, data=data, json=json, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:59: in request\n    return session.request(method=method, url=url, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:587: in request\n    resp = self.send(prep, **send_kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:701: in send\n    r = adapter.send(request, **kwargs)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927A1DD10&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n                resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n    \n            # Send the request.\n            else:\n                if hasattr(conn, &amp;quot;proxy_pool&amp;quot;):\n                    conn = conn.proxy_pool\n    \n                low_conn = conn._get_conn(timeout=DEFAULT_POOL_TIMEOUT)\n    \n                try:\n                    skip_host = &amp;quot;Host&amp;quot; in request.headers\n                    low_conn.putrequest(\n                        request.method,\n                        url,\n                        skip_accept_encoding=True,\n                        skip_host=skip_host,\n                    )\n    \n                    for header, value in request.headers.items():\n                        low_conn.putheader(header, value)\n    \n                    low_conn.endheaders()\n    \n                    for i in request.body:\n                        low_conn.send(hex(len(i))[2:].encode(&amp;quot;utf-8&amp;quot;))\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                        low_conn.send(i)\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                    low_conn.send(b&amp;quot;0\\r\\n\\r\\n&amp;quot;)\n    \n                    # Receive the response from the server\n                    r = low_conn.getresponse()\n    \n                    resp = HTTPResponse.from_httplib(\n                        r,\n                        pool=conn,\n                        connection=low_conn,\n                        preload_content=False,\n                        decode_content=False,\n                    )\n                except Exception:\n                    # If we hit any problems here, clean up the connection.\n                    # Then, raise so that we can handle the actual exception.\n                    low_conn.close()\n                    raise\n    \n        except (ProtocolError, OSError) as err:\n            raise ConnectionError(err, request=request)\n    \n        except MaxRetryError as e:\n            if isinstance(e.reason, ConnectTimeoutError):\n                # TODO: Remove this in 3.0.0: see #2811\n                if not isinstance(e.reason, NewConnectionError):\n                    raise ConnectTimeout(e, request=request)\n    \n            if isinstance(e.reason, ResponseError):\n                raise RetryError(e, request=request)\n    \n            if isinstance(e.reason, _ProxyError):\n                raise ProxyError(e, request=request)\n    \n            if isinstance(e.reason, _SSLError):\n                # This branch is for urllib3 v1.22 and later.\n                raise SSLError(e, request=request)\n    \n&amp;gt;           raise ConnectionError(e, request=request)\nE           requests.exceptions.ConnectionError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x00000239278B31D0&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:565: ConnectionError\n\n------------------------------ Captured log call -------------------------------\nDEBUG    urllib3.connectionpool:connectionpool.py:228 Starting new HTTP connection (1): ihrm-test.itheima.net:80\n\n&#34;}], &#34;scripts/test_ihrm_login_params.py::TestIhrmLoginParams::test_ihrm_login[\\u624b\\u673a\\u53f710\\u4f4d-req_data5-200-False-20001-\\u7528\\u6237\\u540d\\u6216\\u5bc6\\u7801\\u9519\\u8bef]&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Failed&#34;, &#34;testId&#34;: &#34;scripts/test_ihrm_login_params.py::TestIhrmLoginParams::test_ihrm_login[\\u624b\\u673a\\u53f710\\u4f4d-req_data5-200-False-20001-\\u7528\\u6237\\u540d\\u6216\\u5bc6\\u7801\\u9519\\u8bef]&#34;, &#34;duration&#34;: &#34;46 ms&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Failed&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;scripts/test_ihrm_login_params.py::TestIhrmLoginParams::test_ihrm_login[\\u624b\\u673a\\u53f710\\u4f4d-req_data5-200-False-20001-\\u7528\\u6237\\u540d\\u6216\\u5bc6\\u7801\\u9519\\u8bef]&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;46 ms&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;self = &amp;lt;urllib3.connection.HTTPConnection object at 0x00000239263EB590&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n&amp;gt;           conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:174: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\connection.py:72: in create_connection\n    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nhost = &amp;#x27;ihrm-test.itheima.net&amp;#x27;, port = 80, family = &amp;lt;AddressFamily.AF_UNSPEC: 0&amp;gt;, type = &amp;lt;SocketKind.SOCK_STREAM: 1&amp;gt;, proto = 0, flags = 0\n\n    def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):\n        &amp;quot;&amp;quot;&amp;quot;Resolve host and port into list of address info entries.\n    \n        Translate the host/port argument into a sequence of 5-tuples that contain\n        all the necessary arguments for creating a socket connected to that service.\n        host is a domain name, a string representation of an IPv4/v6 address or\n        None. port is a string service name such as &amp;#x27;http&amp;#x27;, a numeric port number or\n        None. By passing None as the value of host and port, you can pass NULL to\n        the underlying C API.\n    \n        The family, type and proto arguments can be optionally specified in order to\n        narrow the list of addresses returned. Passing zero as a value for each of\n        these arguments selects the full range of results.\n        &amp;quot;&amp;quot;&amp;quot;\n        # We override this function since we want to translate the numeric family\n        # and socket type values to enum constants.\n        addrlist = []\n&amp;gt;       for res in _socket.getaddrinfo(host, port, family, type, proto, flags):\nE       socket.gaierror: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\socket.py:962: gaierror\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927D938D0&amp;gt;, method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, body = b&amp;#x27;{&amp;quot;mobile&amp;quot;: &amp;quot;1380000000&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;123456&amp;quot;}&amp;#x27;\nheaders = {&amp;#x27;User-Agent&amp;#x27;: &amp;#x27;python-requests/2.28.1&amp;#x27;, &amp;#x27;Accept-Encoding&amp;#x27;: &amp;#x27;gzip, deflate&amp;#x27;, &amp;#x27;Accept&amp;#x27;: &amp;#x27;*/*&amp;#x27;, &amp;#x27;Connection&amp;#x27;: &amp;#x27;keep-alive&amp;#x27;, &amp;#x27;Content-Length&amp;#x27;: &amp;#x27;46&amp;#x27;, &amp;#x27;Content-Type&amp;#x27;: &amp;#x27;application/json&amp;#x27;}\nretries = Retry(total=0, connect=None, read=False, redirect=None, status=None), redirect = False, assert_same_host = False, timeout = Timeout(connect=None, read=None, total=None)\npool_timeout = None, release_conn = False, chunked = False, body_pos = None, response_kw = {&amp;#x27;decode_content&amp;#x27;: False, &amp;#x27;preload_content&amp;#x27;: False}\nparsed_url = Url(scheme=None, auth=None, host=None, port=None, path=&amp;#x27;/api/sys/login&amp;#x27;, query=None, fragment=None), destination_scheme = None, conn = None, release_this_conn = True\nhttp_tunnel_required = False, err = None, clean_exit = False\n\n    def urlopen(\n        self,\n        method,\n        url,\n        body=None,\n        headers=None,\n        retries=None,\n        redirect=True,\n        assert_same_host=True,\n        timeout=_Default,\n        pool_timeout=None,\n        release_conn=None,\n        chunked=False,\n        body_pos=None,\n        **response_kw\n    ):\n        &amp;quot;&amp;quot;&amp;quot;\n        Get a connection from the pool and perform an HTTP request. This is the\n        lowest level call for making a request, so you&amp;#x27;ll need to specify all\n        the raw details.\n    \n        .. note::\n    \n           More commonly, it&amp;#x27;s appropriate to use a convenience method provided\n           by :class:`.RequestMethods`, such as :meth:`request`.\n    \n        .. note::\n    \n           `release_conn` will only behave as expected if\n           `preload_content=False` because we want to make\n           `preload_content=False` the default behaviour someday soon without\n           breaking backwards compatibility.\n    \n        :param method:\n            HTTP request method (such as GET, POST, PUT, etc.)\n    \n        :param url:\n            The URL to perform the request on.\n    \n        :param body:\n            Data to send in the request body, either :class:`str`, :class:`bytes`,\n            an iterable of :class:`str`/:class:`bytes`, or a file-like object.\n    \n        :param headers:\n            Dictionary of custom headers to send, such as User-Agent,\n            If-None-Match, etc. If None, pool headers are used. If provided,\n            these headers completely replace any pool-specific headers.\n    \n        :param retries:\n            Configure the number of retries to allow before raising a\n            :class:`~urllib3.exceptions.MaxRetryError` exception.\n    \n            Pass ``None`` to retry until you receive a response. Pass a\n            :class:`~urllib3.util.retry.Retry` object for fine-grained control\n            over different types of retries.\n            Pass an integer number to retry connection errors that many times,\n            but no other types of errors. Pass zero to never retry.\n    \n            If ``False``, then retries are disabled and any exception is raised\n            immediately. Also, instead of raising a MaxRetryError on redirects,\n            the redirect response will be returned.\n    \n        :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.\n    \n        :param redirect:\n            If True, automatically handle redirects (status codes 301, 302,\n            303, 307, 308). Each redirect counts as a retry. Disabling retries\n            will disable redirect, too.\n    \n        :param assert_same_host:\n            If ``True``, will make sure that the host of the pool requests is\n            consistent else will raise HostChangedError. When ``False``, you can\n            use the pool on an HTTP proxy and request foreign hosts.\n    \n        :param timeout:\n            If specified, overrides the default timeout for this one\n            request. It may be a float (in seconds) or an instance of\n            :class:`urllib3.util.Timeout`.\n    \n        :param pool_timeout:\n            If set and the pool is set to block=True, then this method will\n            block for ``pool_timeout`` seconds and raise EmptyPoolError if no\n            connection is available within the time period.\n    \n        :param release_conn:\n            If False, then the urlopen call will not release the connection\n            back into the pool once a response is received (but will release if\n            you read the entire contents of the response such as when\n            `preload_content=True`). This is useful if you&amp;#x27;re not preloading\n            the response&amp;#x27;s content immediately. You will need to call\n            ``r.release_conn()`` on the response ``r`` to return the connection\n            back into the pool. If None, it takes the value of\n            ``response_kw.get(&amp;#x27;preload_content&amp;#x27;, True)``.\n    \n        :param chunked:\n            If True, urllib3 will send the body using chunked transfer\n            encoding. Otherwise, urllib3 will send the body using the standard\n            content-length form. Defaults to False.\n    \n        :param int body_pos:\n            Position to seek to in file-like body in the event of a retry or\n            redirect. Typically this won&amp;#x27;t need to be set because urllib3 will\n            auto-populate the value when needed.\n    \n        :param \\\\**response_kw:\n            Additional parameters are passed to\n            :meth:`urllib3.response.HTTPResponse.from_httplib`\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        parsed_url = parse_url(url)\n        destination_scheme = parsed_url.scheme\n    \n        if headers is None:\n            headers = self.headers\n    \n        if not isinstance(retries, Retry):\n            retries = Retry.from_int(retries, redirect=redirect, default=self.retries)\n    \n        if release_conn is None:\n            release_conn = response_kw.get(&amp;quot;preload_content&amp;quot;, True)\n    \n        # Check host\n        if assert_same_host and not self.is_same_host(url):\n            raise HostChangedError(self, url, retries)\n    \n        # Ensure that the URL we&amp;#x27;re connecting to is properly encoded\n        if url.startswith(&amp;quot;/&amp;quot;):\n            url = six.ensure_str(_encode_target(url))\n        else:\n            url = six.ensure_str(parsed_url.url)\n    \n        conn = None\n    \n        # Track whether `conn` needs to be released before\n        # returning/raising/recursing. Update this variable if necessary, and\n        # leave `release_conn` constant throughout the function. That way, if\n        # the function recurses, the original value of `release_conn` will be\n        # passed down into the recursive call, and its value will be respected.\n        #\n        # See issue #651 [1] for details.\n        #\n        # [1] &amp;lt;https://github.com/urllib3/urllib3/issues/651&amp;gt;\n        release_this_conn = release_conn\n    \n        http_tunnel_required = connection_requires_http_tunnel(\n            self.proxy, self.proxy_config, destination_scheme\n        )\n    \n        # Merge the proxy headers. Only done when not using HTTP CONNECT. We\n        # have to copy the headers dict so we can safely change it without those\n        # changes being reflected in anyone else&amp;#x27;s copy.\n        if not http_tunnel_required:\n            headers = headers.copy()\n            headers.update(self.proxy_headers)\n    \n        # Must keep the exception bound to a separate variable or else Python 3\n        # complains about UnboundLocalError.\n        err = None\n    \n        # Keep track of whether we cleanly exited the except block. This\n        # ensures we do proper cleanup in finally.\n        clean_exit = False\n    \n        # Rewind body position, if needed. Record current position\n        # for future rewinds in the event of a redirect/retry.\n        body_pos = set_file_position(body, body_pos)\n    \n        try:\n            # Request a connection from the queue.\n            timeout_obj = self._get_timeout(timeout)\n            conn = self._get_conn(timeout=pool_timeout)\n    \n            conn.timeout = timeout_obj.connect_timeout\n    \n            is_new_proxy_conn = self.proxy is not None and not getattr(\n                conn, &amp;quot;sock&amp;quot;, None\n            )\n            if is_new_proxy_conn and http_tunnel_required:\n                self._prepare_proxy(conn)\n    \n            # Make the request on the httplib connection object.\n&amp;gt;           httplib_response = self._make_request(\n                conn,\n                method,\n                url,\n                timeout=timeout_obj,\n                body=body,\n                headers=headers,\n                chunked=chunked,\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:703: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:398: in _make_request\n    conn.request(method, url, **httplib_request_kw)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:239: in request\n    super(HTTPConnection, self).request(method, url, body=body, headers=headers)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1282: in request\n    self._send_request(method, url, body, headers, encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1328: in _send_request\n    self.endheaders(body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1277: in endheaders\n    self._send_output(message_body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1037: in _send_output\n    self.send(msg)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:975: in send\n    self.connect()\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:205: in connect\n    conn = self._new_conn()\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;urllib3.connection.HTTPConnection object at 0x00000239263EB590&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n            conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n    \n        except SocketTimeout:\n            raise ConnectTimeoutError(\n                self,\n                &amp;quot;Connection to %s timed out. (connect timeout=%s)&amp;quot;\n                % (self.host, self.timeout),\n            )\n    \n        except SocketError as e:\n&amp;gt;           raise NewConnectionError(\n                self, &amp;quot;Failed to establish a new connection: %s&amp;quot; % e\n            )\nE           urllib3.exceptions.NewConnectionError: &amp;lt;urllib3.connection.HTTPConnection object at 0x00000239263EB590&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:186: NewConnectionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927D92750&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n&amp;gt;               resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:489: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:787: in urlopen\n    retries = retries.increment(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = Retry(total=0, connect=None, read=False, redirect=None, status=None), method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, response = None\nerror = NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x00000239263EB590&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;)\n_pool = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927D938D0&amp;gt;, _stacktrace = &amp;lt;traceback object at 0x0000023927C00D40&amp;gt;\n\n    def increment(\n        self,\n        method=None,\n        url=None,\n        response=None,\n        error=None,\n        _pool=None,\n        _stacktrace=None,\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Return a new Retry object with incremented retry counters.\n    \n        :param response: A response object, or None, if the server did not\n            return a response.\n        :type response: :class:`~urllib3.response.HTTPResponse`\n        :param Exception error: An error encountered during the request, or\n            None if the response was received successfully.\n    \n        :return: A new ``Retry`` object.\n        &amp;quot;&amp;quot;&amp;quot;\n        if self.total is False and error:\n            # Disabled, indicate to re-raise the error.\n            raise six.reraise(type(error), error, _stacktrace)\n    \n        total = self.total\n        if total is not None:\n            total -= 1\n    \n        connect = self.connect\n        read = self.read\n        redirect = self.redirect\n        status_count = self.status\n        other = self.other\n        cause = &amp;quot;unknown&amp;quot;\n        status = None\n        redirect_location = None\n    \n        if error and self._is_connection_error(error):\n            # Connect retry?\n            if connect is False:\n                raise six.reraise(type(error), error, _stacktrace)\n            elif connect is not None:\n                connect -= 1\n    \n        elif error and self._is_read_error(error):\n            # Read retry?\n            if read is False or not self._is_method_retryable(method):\n                raise six.reraise(type(error), error, _stacktrace)\n            elif read is not None:\n                read -= 1\n    \n        elif error:\n            # Other retry?\n            if other is not None:\n                other -= 1\n    \n        elif response and response.get_redirect_location():\n            # Redirect retry?\n            if redirect is not None:\n                redirect -= 1\n            cause = &amp;quot;too many redirects&amp;quot;\n            redirect_location = response.get_redirect_location()\n            status = response.status\n    \n        else:\n            # Incrementing because of a server error like a 500 in\n            # status_forcelist and the given method is in the allowed_methods\n            cause = ResponseError.GENERIC_ERROR\n            if response and response.status:\n                if status_count is not None:\n                    status_count -= 1\n                cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status)\n                status = response.status\n    \n        history = self.history + (\n            RequestHistory(method, url, error, status, redirect_location),\n        )\n    \n        new_retry = self.new(\n            total=total,\n            connect=connect,\n            read=read,\n            redirect=redirect,\n            status=status_count,\n            other=other,\n            history=history,\n        )\n    \n        if new_retry.is_exhausted():\n&amp;gt;           raise MaxRetryError(_pool, url, error or ResponseError(cause))\nE           urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x00000239263EB590&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\retry.py:592: MaxRetryError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;scripts.test_ihrm_login_params.TestIhrmLoginParams object at 0x00000239272AF690&amp;gt;, desc = &amp;#x27;\u624b\u673a\u53f710\u4f4d&amp;#x27;, req_data = {&amp;#x27;mobile&amp;#x27;: &amp;#x27;1380000000&amp;#x27;, &amp;#x27;password&amp;#x27;: &amp;#x27;123456&amp;#x27;}, status_code = 200\nsuccess = False, code = 20001, message = &amp;#x27;\u7528\u6237\u540d\u6216\u5bc6\u7801\u9519\u8bef&amp;#x27;\n\n    @pytest.mark.parametrize(&amp;quot;desc, req_data, status_code, success, code, message&amp;quot;, data)\n    # \u5b9a\u4e49 \u901a\u7528\u6d4b\u8bd5\u65b9\u6cd5 - \u6d4b\u8bd5ihrm\u767b\u5f55\u63a5\u53e3\n    def test_ihrm_login(self, desc, req_data, status_code, success, code, message):\n        # \u8c03\u7528 \u81ea\u5df1\u5c01\u88c5\u7684 api\uff0c \u83b7\u53d6\u54cd\u5e94\u7ed3\u679c\n&amp;gt;       resp = IhrmLoginApi.login(req_data)\n\nscripts\\test_ihrm_login_params.py:20: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\napi\\ihrm_login_api.py:12: in login\n    resp = requests.post(url=&amp;quot;http://ihrm-test.itheima.net/api/sys/login&amp;quot;, json=req_data)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:115: in post\n    return request(&amp;quot;post&amp;quot;, url, data=data, json=json, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:59: in request\n    return session.request(method=method, url=url, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:587: in request\n    resp = self.send(prep, **send_kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:701: in send\n    r = adapter.send(request, **kwargs)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927D92750&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n                resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n    \n            # Send the request.\n            else:\n                if hasattr(conn, &amp;quot;proxy_pool&amp;quot;):\n                    conn = conn.proxy_pool\n    \n                low_conn = conn._get_conn(timeout=DEFAULT_POOL_TIMEOUT)\n    \n                try:\n                    skip_host = &amp;quot;Host&amp;quot; in request.headers\n                    low_conn.putrequest(\n                        request.method,\n                        url,\n                        skip_accept_encoding=True,\n                        skip_host=skip_host,\n                    )\n    \n                    for header, value in request.headers.items():\n                        low_conn.putheader(header, value)\n    \n                    low_conn.endheaders()\n    \n                    for i in request.body:\n                        low_conn.send(hex(len(i))[2:].encode(&amp;quot;utf-8&amp;quot;))\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                        low_conn.send(i)\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                    low_conn.send(b&amp;quot;0\\r\\n\\r\\n&amp;quot;)\n    \n                    # Receive the response from the server\n                    r = low_conn.getresponse()\n    \n                    resp = HTTPResponse.from_httplib(\n                        r,\n                        pool=conn,\n                        connection=low_conn,\n                        preload_content=False,\n                        decode_content=False,\n                    )\n                except Exception:\n                    # If we hit any problems here, clean up the connection.\n                    # Then, raise so that we can handle the actual exception.\n                    low_conn.close()\n                    raise\n    \n        except (ProtocolError, OSError) as err:\n            raise ConnectionError(err, request=request)\n    \n        except MaxRetryError as e:\n            if isinstance(e.reason, ConnectTimeoutError):\n                # TODO: Remove this in 3.0.0: see #2811\n                if not isinstance(e.reason, NewConnectionError):\n                    raise ConnectTimeout(e, request=request)\n    \n            if isinstance(e.reason, ResponseError):\n                raise RetryError(e, request=request)\n    \n            if isinstance(e.reason, _ProxyError):\n                raise ProxyError(e, request=request)\n    \n            if isinstance(e.reason, _SSLError):\n                # This branch is for urllib3 v1.22 and later.\n                raise SSLError(e, request=request)\n    \n&amp;gt;           raise ConnectionError(e, request=request)\nE           requests.exceptions.ConnectionError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x00000239263EB590&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:565: ConnectionError\n\n------------------------------ Captured log call -------------------------------\nDEBUG    urllib3.connectionpool:connectionpool.py:228 Starting new HTTP connection (1): ihrm-test.itheima.net:80\n\n&#34;}], &#34;scripts/test_ihrm_login_params.py::TestIhrmLoginParams::test_ihrm_login[\\u591a\\u53c2-req_data6-200-True-10000-\\u64cd\\u4f5c\\u6210\\u529f]&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Failed&#34;, &#34;testId&#34;: &#34;scripts/test_ihrm_login_params.py::TestIhrmLoginParams::test_ihrm_login[\\u591a\\u53c2-req_data6-200-True-10000-\\u64cd\\u4f5c\\u6210\\u529f]&#34;, &#34;duration&#34;: &#34;48 ms&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Failed&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;scripts/test_ihrm_login_params.py::TestIhrmLoginParams::test_ihrm_login[\\u591a\\u53c2-req_data6-200-True-10000-\\u64cd\\u4f5c\\u6210\\u529f]&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;48 ms&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;self = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927804250&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n&amp;gt;           conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:174: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\connection.py:72: in create_connection\n    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nhost = &amp;#x27;ihrm-test.itheima.net&amp;#x27;, port = 80, family = &amp;lt;AddressFamily.AF_UNSPEC: 0&amp;gt;, type = &amp;lt;SocketKind.SOCK_STREAM: 1&amp;gt;, proto = 0, flags = 0\n\n    def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):\n        &amp;quot;&amp;quot;&amp;quot;Resolve host and port into list of address info entries.\n    \n        Translate the host/port argument into a sequence of 5-tuples that contain\n        all the necessary arguments for creating a socket connected to that service.\n        host is a domain name, a string representation of an IPv4/v6 address or\n        None. port is a string service name such as &amp;#x27;http&amp;#x27;, a numeric port number or\n        None. By passing None as the value of host and port, you can pass NULL to\n        the underlying C API.\n    \n        The family, type and proto arguments can be optionally specified in order to\n        narrow the list of addresses returned. Passing zero as a value for each of\n        these arguments selects the full range of results.\n        &amp;quot;&amp;quot;&amp;quot;\n        # We override this function since we want to translate the numeric family\n        # and socket type values to enum constants.\n        addrlist = []\n&amp;gt;       for res in _socket.getaddrinfo(host, port, family, type, proto, flags):\nE       socket.gaierror: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\socket.py:962: gaierror\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927804A50&amp;gt;, method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;\nbody = b&amp;#x27;{&amp;quot;mobile&amp;quot;: &amp;quot;13800000002&amp;quot;, &amp;quot;password&amp;quot;: &amp;quot;123456&amp;quot;, &amp;quot;abc&amp;quot;: &amp;quot;123&amp;quot;}&amp;#x27;\nheaders = {&amp;#x27;User-Agent&amp;#x27;: &amp;#x27;python-requests/2.28.1&amp;#x27;, &amp;#x27;Accept-Encoding&amp;#x27;: &amp;#x27;gzip, deflate&amp;#x27;, &amp;#x27;Accept&amp;#x27;: &amp;#x27;*/*&amp;#x27;, &amp;#x27;Connection&amp;#x27;: &amp;#x27;keep-alive&amp;#x27;, &amp;#x27;Content-Length&amp;#x27;: &amp;#x27;61&amp;#x27;, &amp;#x27;Content-Type&amp;#x27;: &amp;#x27;application/json&amp;#x27;}\nretries = Retry(total=0, connect=None, read=False, redirect=None, status=None), redirect = False, assert_same_host = False, timeout = Timeout(connect=None, read=None, total=None)\npool_timeout = None, release_conn = False, chunked = False, body_pos = None, response_kw = {&amp;#x27;decode_content&amp;#x27;: False, &amp;#x27;preload_content&amp;#x27;: False}\nparsed_url = Url(scheme=None, auth=None, host=None, port=None, path=&amp;#x27;/api/sys/login&amp;#x27;, query=None, fragment=None), destination_scheme = None, conn = None, release_this_conn = True\nhttp_tunnel_required = False, err = None, clean_exit = False\n\n    def urlopen(\n        self,\n        method,\n        url,\n        body=None,\n        headers=None,\n        retries=None,\n        redirect=True,\n        assert_same_host=True,\n        timeout=_Default,\n        pool_timeout=None,\n        release_conn=None,\n        chunked=False,\n        body_pos=None,\n        **response_kw\n    ):\n        &amp;quot;&amp;quot;&amp;quot;\n        Get a connection from the pool and perform an HTTP request. This is the\n        lowest level call for making a request, so you&amp;#x27;ll need to specify all\n        the raw details.\n    \n        .. note::\n    \n           More commonly, it&amp;#x27;s appropriate to use a convenience method provided\n           by :class:`.RequestMethods`, such as :meth:`request`.\n    \n        .. note::\n    \n           `release_conn` will only behave as expected if\n           `preload_content=False` because we want to make\n           `preload_content=False` the default behaviour someday soon without\n           breaking backwards compatibility.\n    \n        :param method:\n            HTTP request method (such as GET, POST, PUT, etc.)\n    \n        :param url:\n            The URL to perform the request on.\n    \n        :param body:\n            Data to send in the request body, either :class:`str`, :class:`bytes`,\n            an iterable of :class:`str`/:class:`bytes`, or a file-like object.\n    \n        :param headers:\n            Dictionary of custom headers to send, such as User-Agent,\n            If-None-Match, etc. If None, pool headers are used. If provided,\n            these headers completely replace any pool-specific headers.\n    \n        :param retries:\n            Configure the number of retries to allow before raising a\n            :class:`~urllib3.exceptions.MaxRetryError` exception.\n    \n            Pass ``None`` to retry until you receive a response. Pass a\n            :class:`~urllib3.util.retry.Retry` object for fine-grained control\n            over different types of retries.\n            Pass an integer number to retry connection errors that many times,\n            but no other types of errors. Pass zero to never retry.\n    \n            If ``False``, then retries are disabled and any exception is raised\n            immediately. Also, instead of raising a MaxRetryError on redirects,\n            the redirect response will be returned.\n    \n        :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.\n    \n        :param redirect:\n            If True, automatically handle redirects (status codes 301, 302,\n            303, 307, 308). Each redirect counts as a retry. Disabling retries\n            will disable redirect, too.\n    \n        :param assert_same_host:\n            If ``True``, will make sure that the host of the pool requests is\n            consistent else will raise HostChangedError. When ``False``, you can\n            use the pool on an HTTP proxy and request foreign hosts.\n    \n        :param timeout:\n            If specified, overrides the default timeout for this one\n            request. It may be a float (in seconds) or an instance of\n            :class:`urllib3.util.Timeout`.\n    \n        :param pool_timeout:\n            If set and the pool is set to block=True, then this method will\n            block for ``pool_timeout`` seconds and raise EmptyPoolError if no\n            connection is available within the time period.\n    \n        :param release_conn:\n            If False, then the urlopen call will not release the connection\n            back into the pool once a response is received (but will release if\n            you read the entire contents of the response such as when\n            `preload_content=True`). This is useful if you&amp;#x27;re not preloading\n            the response&amp;#x27;s content immediately. You will need to call\n            ``r.release_conn()`` on the response ``r`` to return the connection\n            back into the pool. If None, it takes the value of\n            ``response_kw.get(&amp;#x27;preload_content&amp;#x27;, True)``.\n    \n        :param chunked:\n            If True, urllib3 will send the body using chunked transfer\n            encoding. Otherwise, urllib3 will send the body using the standard\n            content-length form. Defaults to False.\n    \n        :param int body_pos:\n            Position to seek to in file-like body in the event of a retry or\n            redirect. Typically this won&amp;#x27;t need to be set because urllib3 will\n            auto-populate the value when needed.\n    \n        :param \\\\**response_kw:\n            Additional parameters are passed to\n            :meth:`urllib3.response.HTTPResponse.from_httplib`\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        parsed_url = parse_url(url)\n        destination_scheme = parsed_url.scheme\n    \n        if headers is None:\n            headers = self.headers\n    \n        if not isinstance(retries, Retry):\n            retries = Retry.from_int(retries, redirect=redirect, default=self.retries)\n    \n        if release_conn is None:\n            release_conn = response_kw.get(&amp;quot;preload_content&amp;quot;, True)\n    \n        # Check host\n        if assert_same_host and not self.is_same_host(url):\n            raise HostChangedError(self, url, retries)\n    \n        # Ensure that the URL we&amp;#x27;re connecting to is properly encoded\n        if url.startswith(&amp;quot;/&amp;quot;):\n            url = six.ensure_str(_encode_target(url))\n        else:\n            url = six.ensure_str(parsed_url.url)\n    \n        conn = None\n    \n        # Track whether `conn` needs to be released before\n        # returning/raising/recursing. Update this variable if necessary, and\n        # leave `release_conn` constant throughout the function. That way, if\n        # the function recurses, the original value of `release_conn` will be\n        # passed down into the recursive call, and its value will be respected.\n        #\n        # See issue #651 [1] for details.\n        #\n        # [1] &amp;lt;https://github.com/urllib3/urllib3/issues/651&amp;gt;\n        release_this_conn = release_conn\n    \n        http_tunnel_required = connection_requires_http_tunnel(\n            self.proxy, self.proxy_config, destination_scheme\n        )\n    \n        # Merge the proxy headers. Only done when not using HTTP CONNECT. We\n        # have to copy the headers dict so we can safely change it without those\n        # changes being reflected in anyone else&amp;#x27;s copy.\n        if not http_tunnel_required:\n            headers = headers.copy()\n            headers.update(self.proxy_headers)\n    \n        # Must keep the exception bound to a separate variable or else Python 3\n        # complains about UnboundLocalError.\n        err = None\n    \n        # Keep track of whether we cleanly exited the except block. This\n        # ensures we do proper cleanup in finally.\n        clean_exit = False\n    \n        # Rewind body position, if needed. Record current position\n        # for future rewinds in the event of a redirect/retry.\n        body_pos = set_file_position(body, body_pos)\n    \n        try:\n            # Request a connection from the queue.\n            timeout_obj = self._get_timeout(timeout)\n            conn = self._get_conn(timeout=pool_timeout)\n    \n            conn.timeout = timeout_obj.connect_timeout\n    \n            is_new_proxy_conn = self.proxy is not None and not getattr(\n                conn, &amp;quot;sock&amp;quot;, None\n            )\n            if is_new_proxy_conn and http_tunnel_required:\n                self._prepare_proxy(conn)\n    \n            # Make the request on the httplib connection object.\n&amp;gt;           httplib_response = self._make_request(\n                conn,\n                method,\n                url,\n                timeout=timeout_obj,\n                body=body,\n                headers=headers,\n                chunked=chunked,\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:703: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:398: in _make_request\n    conn.request(method, url, **httplib_request_kw)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:239: in request\n    super(HTTPConnection, self).request(method, url, body=body, headers=headers)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1282: in request\n    self._send_request(method, url, body, headers, encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1328: in _send_request\n    self.endheaders(body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1277: in endheaders\n    self._send_output(message_body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1037: in _send_output\n    self.send(msg)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:975: in send\n    self.connect()\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:205: in connect\n    conn = self._new_conn()\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927804250&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n            conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n    \n        except SocketTimeout:\n            raise ConnectTimeoutError(\n                self,\n                &amp;quot;Connection to %s timed out. (connect timeout=%s)&amp;quot;\n                % (self.host, self.timeout),\n            )\n    \n        except SocketError as e:\n&amp;gt;           raise NewConnectionError(\n                self, &amp;quot;Failed to establish a new connection: %s&amp;quot; % e\n            )\nE           urllib3.exceptions.NewConnectionError: &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927804250&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:186: NewConnectionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x00000239278058D0&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n&amp;gt;               resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:489: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:787: in urlopen\n    retries = retries.increment(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = Retry(total=0, connect=None, read=False, redirect=None, status=None), method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, response = None\nerror = NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927804250&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;)\n_pool = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927804A50&amp;gt;, _stacktrace = &amp;lt;traceback object at 0x0000023927806080&amp;gt;\n\n    def increment(\n        self,\n        method=None,\n        url=None,\n        response=None,\n        error=None,\n        _pool=None,\n        _stacktrace=None,\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Return a new Retry object with incremented retry counters.\n    \n        :param response: A response object, or None, if the server did not\n            return a response.\n        :type response: :class:`~urllib3.response.HTTPResponse`\n        :param Exception error: An error encountered during the request, or\n            None if the response was received successfully.\n    \n        :return: A new ``Retry`` object.\n        &amp;quot;&amp;quot;&amp;quot;\n        if self.total is False and error:\n            # Disabled, indicate to re-raise the error.\n            raise six.reraise(type(error), error, _stacktrace)\n    \n        total = self.total\n        if total is not None:\n            total -= 1\n    \n        connect = self.connect\n        read = self.read\n        redirect = self.redirect\n        status_count = self.status\n        other = self.other\n        cause = &amp;quot;unknown&amp;quot;\n        status = None\n        redirect_location = None\n    \n        if error and self._is_connection_error(error):\n            # Connect retry?\n            if connect is False:\n                raise six.reraise(type(error), error, _stacktrace)\n            elif connect is not None:\n                connect -= 1\n    \n        elif error and self._is_read_error(error):\n            # Read retry?\n            if read is False or not self._is_method_retryable(method):\n                raise six.reraise(type(error), error, _stacktrace)\n            elif read is not None:\n                read -= 1\n    \n        elif error:\n            # Other retry?\n            if other is not None:\n                other -= 1\n    \n        elif response and response.get_redirect_location():\n            # Redirect retry?\n            if redirect is not None:\n                redirect -= 1\n            cause = &amp;quot;too many redirects&amp;quot;\n            redirect_location = response.get_redirect_location()\n            status = response.status\n    \n        else:\n            # Incrementing because of a server error like a 500 in\n            # status_forcelist and the given method is in the allowed_methods\n            cause = ResponseError.GENERIC_ERROR\n            if response and response.status:\n                if status_count is not None:\n                    status_count -= 1\n                cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status)\n                status = response.status\n    \n        history = self.history + (\n            RequestHistory(method, url, error, status, redirect_location),\n        )\n    \n        new_retry = self.new(\n            total=total,\n            connect=connect,\n            read=read,\n            redirect=redirect,\n            status=status_count,\n            other=other,\n            history=history,\n        )\n    \n        if new_retry.is_exhausted():\n&amp;gt;           raise MaxRetryError(_pool, url, error or ResponseError(cause))\nE           urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927804250&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\retry.py:592: MaxRetryError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;scripts.test_ihrm_login_params.TestIhrmLoginParams object at 0x00000239272AF7D0&amp;gt;, desc = &amp;#x27;\u591a\u53c2&amp;#x27;, req_data = {&amp;#x27;abc&amp;#x27;: &amp;#x27;123&amp;#x27;, &amp;#x27;mobile&amp;#x27;: &amp;#x27;13800000002&amp;#x27;, &amp;#x27;password&amp;#x27;: &amp;#x27;123456&amp;#x27;}\nstatus_code = 200, success = True, code = 10000, message = &amp;#x27;\u64cd\u4f5c\u6210\u529f&amp;#x27;\n\n    @pytest.mark.parametrize(&amp;quot;desc, req_data, status_code, success, code, message&amp;quot;, data)\n    # \u5b9a\u4e49 \u901a\u7528\u6d4b\u8bd5\u65b9\u6cd5 - \u6d4b\u8bd5ihrm\u767b\u5f55\u63a5\u53e3\n    def test_ihrm_login(self, desc, req_data, status_code, success, code, message):\n        # \u8c03\u7528 \u81ea\u5df1\u5c01\u88c5\u7684 api\uff0c \u83b7\u53d6\u54cd\u5e94\u7ed3\u679c\n&amp;gt;       resp = IhrmLoginApi.login(req_data)\n\nscripts\\test_ihrm_login_params.py:20: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\napi\\ihrm_login_api.py:12: in login\n    resp = requests.post(url=&amp;quot;http://ihrm-test.itheima.net/api/sys/login&amp;quot;, json=req_data)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:115: in post\n    return request(&amp;quot;post&amp;quot;, url, data=data, json=json, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:59: in request\n    return session.request(method=method, url=url, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:587: in request\n    resp = self.send(prep, **send_kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:701: in send\n    r = adapter.send(request, **kwargs)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x00000239278058D0&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n                resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n    \n            # Send the request.\n            else:\n                if hasattr(conn, &amp;quot;proxy_pool&amp;quot;):\n                    conn = conn.proxy_pool\n    \n                low_conn = conn._get_conn(timeout=DEFAULT_POOL_TIMEOUT)\n    \n                try:\n                    skip_host = &amp;quot;Host&amp;quot; in request.headers\n                    low_conn.putrequest(\n                        request.method,\n                        url,\n                        skip_accept_encoding=True,\n                        skip_host=skip_host,\n                    )\n    \n                    for header, value in request.headers.items():\n                        low_conn.putheader(header, value)\n    \n                    low_conn.endheaders()\n    \n                    for i in request.body:\n                        low_conn.send(hex(len(i))[2:].encode(&amp;quot;utf-8&amp;quot;))\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                        low_conn.send(i)\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                    low_conn.send(b&amp;quot;0\\r\\n\\r\\n&amp;quot;)\n    \n                    # Receive the response from the server\n                    r = low_conn.getresponse()\n    \n                    resp = HTTPResponse.from_httplib(\n                        r,\n                        pool=conn,\n                        connection=low_conn,\n                        preload_content=False,\n                        decode_content=False,\n                    )\n                except Exception:\n                    # If we hit any problems here, clean up the connection.\n                    # Then, raise so that we can handle the actual exception.\n                    low_conn.close()\n                    raise\n    \n        except (ProtocolError, OSError) as err:\n            raise ConnectionError(err, request=request)\n    \n        except MaxRetryError as e:\n            if isinstance(e.reason, ConnectTimeoutError):\n                # TODO: Remove this in 3.0.0: see #2811\n                if not isinstance(e.reason, NewConnectionError):\n                    raise ConnectTimeout(e, request=request)\n    \n            if isinstance(e.reason, ResponseError):\n                raise RetryError(e, request=request)\n    \n            if isinstance(e.reason, _ProxyError):\n                raise ProxyError(e, request=request)\n    \n            if isinstance(e.reason, _SSLError):\n                # This branch is for urllib3 v1.22 and later.\n                raise SSLError(e, request=request)\n    \n&amp;gt;           raise ConnectionError(e, request=request)\nE           requests.exceptions.ConnectionError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927804250&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:565: ConnectionError\n\n------------------------------ Captured log call -------------------------------\nDEBUG    urllib3.connectionpool:connectionpool.py:228 Starting new HTTP connection (1): ihrm-test.itheima.net:80\n\n&#34;}], &#34;scripts/test_ihrm_login_params.py::TestIhrmLoginParams::test_ihrm_login[\\u5c11\\u53c2-req_data7-200-False-20001-\\u7528\\u6237\\u540d\\u6216\\u5bc6\\u7801\\u9519\\u8bef]&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Failed&#34;, &#34;testId&#34;: &#34;scripts/test_ihrm_login_params.py::TestIhrmLoginParams::test_ihrm_login[\\u5c11\\u53c2-req_data7-200-False-20001-\\u7528\\u6237\\u540d\\u6216\\u5bc6\\u7801\\u9519\\u8bef]&#34;, &#34;duration&#34;: &#34;50 ms&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Failed&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;scripts/test_ihrm_login_params.py::TestIhrmLoginParams::test_ihrm_login[\\u5c11\\u53c2-req_data7-200-False-20001-\\u7528\\u6237\\u540d\\u6216\\u5bc6\\u7801\\u9519\\u8bef]&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;50 ms&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;self = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927E5AB90&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n&amp;gt;           conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:174: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\connection.py:72: in create_connection\n    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nhost = &amp;#x27;ihrm-test.itheima.net&amp;#x27;, port = 80, family = &amp;lt;AddressFamily.AF_UNSPEC: 0&amp;gt;, type = &amp;lt;SocketKind.SOCK_STREAM: 1&amp;gt;, proto = 0, flags = 0\n\n    def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):\n        &amp;quot;&amp;quot;&amp;quot;Resolve host and port into list of address info entries.\n    \n        Translate the host/port argument into a sequence of 5-tuples that contain\n        all the necessary arguments for creating a socket connected to that service.\n        host is a domain name, a string representation of an IPv4/v6 address or\n        None. port is a string service name such as &amp;#x27;http&amp;#x27;, a numeric port number or\n        None. By passing None as the value of host and port, you can pass NULL to\n        the underlying C API.\n    \n        The family, type and proto arguments can be optionally specified in order to\n        narrow the list of addresses returned. Passing zero as a value for each of\n        these arguments selects the full range of results.\n        &amp;quot;&amp;quot;&amp;quot;\n        # We override this function since we want to translate the numeric family\n        # and socket type values to enum constants.\n        addrlist = []\n&amp;gt;       for res in _socket.getaddrinfo(host, port, family, type, proto, flags):\nE       socket.gaierror: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\socket.py:962: gaierror\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927E5AF90&amp;gt;, method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, body = b&amp;#x27;{&amp;quot;mobile&amp;quot;: &amp;quot;13800000002&amp;quot;}&amp;#x27;\nheaders = {&amp;#x27;User-Agent&amp;#x27;: &amp;#x27;python-requests/2.28.1&amp;#x27;, &amp;#x27;Accept-Encoding&amp;#x27;: &amp;#x27;gzip, deflate&amp;#x27;, &amp;#x27;Accept&amp;#x27;: &amp;#x27;*/*&amp;#x27;, &amp;#x27;Connection&amp;#x27;: &amp;#x27;keep-alive&amp;#x27;, &amp;#x27;Content-Length&amp;#x27;: &amp;#x27;25&amp;#x27;, &amp;#x27;Content-Type&amp;#x27;: &amp;#x27;application/json&amp;#x27;}\nretries = Retry(total=0, connect=None, read=False, redirect=None, status=None), redirect = False, assert_same_host = False, timeout = Timeout(connect=None, read=None, total=None)\npool_timeout = None, release_conn = False, chunked = False, body_pos = None, response_kw = {&amp;#x27;decode_content&amp;#x27;: False, &amp;#x27;preload_content&amp;#x27;: False}\nparsed_url = Url(scheme=None, auth=None, host=None, port=None, path=&amp;#x27;/api/sys/login&amp;#x27;, query=None, fragment=None), destination_scheme = None, conn = None, release_this_conn = True\nhttp_tunnel_required = False, err = None, clean_exit = False\n\n    def urlopen(\n        self,\n        method,\n        url,\n        body=None,\n        headers=None,\n        retries=None,\n        redirect=True,\n        assert_same_host=True,\n        timeout=_Default,\n        pool_timeout=None,\n        release_conn=None,\n        chunked=False,\n        body_pos=None,\n        **response_kw\n    ):\n        &amp;quot;&amp;quot;&amp;quot;\n        Get a connection from the pool and perform an HTTP request. This is the\n        lowest level call for making a request, so you&amp;#x27;ll need to specify all\n        the raw details.\n    \n        .. note::\n    \n           More commonly, it&amp;#x27;s appropriate to use a convenience method provided\n           by :class:`.RequestMethods`, such as :meth:`request`.\n    \n        .. note::\n    \n           `release_conn` will only behave as expected if\n           `preload_content=False` because we want to make\n           `preload_content=False` the default behaviour someday soon without\n           breaking backwards compatibility.\n    \n        :param method:\n            HTTP request method (such as GET, POST, PUT, etc.)\n    \n        :param url:\n            The URL to perform the request on.\n    \n        :param body:\n            Data to send in the request body, either :class:`str`, :class:`bytes`,\n            an iterable of :class:`str`/:class:`bytes`, or a file-like object.\n    \n        :param headers:\n            Dictionary of custom headers to send, such as User-Agent,\n            If-None-Match, etc. If None, pool headers are used. If provided,\n            these headers completely replace any pool-specific headers.\n    \n        :param retries:\n            Configure the number of retries to allow before raising a\n            :class:`~urllib3.exceptions.MaxRetryError` exception.\n    \n            Pass ``None`` to retry until you receive a response. Pass a\n            :class:`~urllib3.util.retry.Retry` object for fine-grained control\n            over different types of retries.\n            Pass an integer number to retry connection errors that many times,\n            but no other types of errors. Pass zero to never retry.\n    \n            If ``False``, then retries are disabled and any exception is raised\n            immediately. Also, instead of raising a MaxRetryError on redirects,\n            the redirect response will be returned.\n    \n        :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.\n    \n        :param redirect:\n            If True, automatically handle redirects (status codes 301, 302,\n            303, 307, 308). Each redirect counts as a retry. Disabling retries\n            will disable redirect, too.\n    \n        :param assert_same_host:\n            If ``True``, will make sure that the host of the pool requests is\n            consistent else will raise HostChangedError. When ``False``, you can\n            use the pool on an HTTP proxy and request foreign hosts.\n    \n        :param timeout:\n            If specified, overrides the default timeout for this one\n            request. It may be a float (in seconds) or an instance of\n            :class:`urllib3.util.Timeout`.\n    \n        :param pool_timeout:\n            If set and the pool is set to block=True, then this method will\n            block for ``pool_timeout`` seconds and raise EmptyPoolError if no\n            connection is available within the time period.\n    \n        :param release_conn:\n            If False, then the urlopen call will not release the connection\n            back into the pool once a response is received (but will release if\n            you read the entire contents of the response such as when\n            `preload_content=True`). This is useful if you&amp;#x27;re not preloading\n            the response&amp;#x27;s content immediately. You will need to call\n            ``r.release_conn()`` on the response ``r`` to return the connection\n            back into the pool. If None, it takes the value of\n            ``response_kw.get(&amp;#x27;preload_content&amp;#x27;, True)``.\n    \n        :param chunked:\n            If True, urllib3 will send the body using chunked transfer\n            encoding. Otherwise, urllib3 will send the body using the standard\n            content-length form. Defaults to False.\n    \n        :param int body_pos:\n            Position to seek to in file-like body in the event of a retry or\n            redirect. Typically this won&amp;#x27;t need to be set because urllib3 will\n            auto-populate the value when needed.\n    \n        :param \\\\**response_kw:\n            Additional parameters are passed to\n            :meth:`urllib3.response.HTTPResponse.from_httplib`\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        parsed_url = parse_url(url)\n        destination_scheme = parsed_url.scheme\n    \n        if headers is None:\n            headers = self.headers\n    \n        if not isinstance(retries, Retry):\n            retries = Retry.from_int(retries, redirect=redirect, default=self.retries)\n    \n        if release_conn is None:\n            release_conn = response_kw.get(&amp;quot;preload_content&amp;quot;, True)\n    \n        # Check host\n        if assert_same_host and not self.is_same_host(url):\n            raise HostChangedError(self, url, retries)\n    \n        # Ensure that the URL we&amp;#x27;re connecting to is properly encoded\n        if url.startswith(&amp;quot;/&amp;quot;):\n            url = six.ensure_str(_encode_target(url))\n        else:\n            url = six.ensure_str(parsed_url.url)\n    \n        conn = None\n    \n        # Track whether `conn` needs to be released before\n        # returning/raising/recursing. Update this variable if necessary, and\n        # leave `release_conn` constant throughout the function. That way, if\n        # the function recurses, the original value of `release_conn` will be\n        # passed down into the recursive call, and its value will be respected.\n        #\n        # See issue #651 [1] for details.\n        #\n        # [1] &amp;lt;https://github.com/urllib3/urllib3/issues/651&amp;gt;\n        release_this_conn = release_conn\n    \n        http_tunnel_required = connection_requires_http_tunnel(\n            self.proxy, self.proxy_config, destination_scheme\n        )\n    \n        # Merge the proxy headers. Only done when not using HTTP CONNECT. We\n        # have to copy the headers dict so we can safely change it without those\n        # changes being reflected in anyone else&amp;#x27;s copy.\n        if not http_tunnel_required:\n            headers = headers.copy()\n            headers.update(self.proxy_headers)\n    \n        # Must keep the exception bound to a separate variable or else Python 3\n        # complains about UnboundLocalError.\n        err = None\n    \n        # Keep track of whether we cleanly exited the except block. This\n        # ensures we do proper cleanup in finally.\n        clean_exit = False\n    \n        # Rewind body position, if needed. Record current position\n        # for future rewinds in the event of a redirect/retry.\n        body_pos = set_file_position(body, body_pos)\n    \n        try:\n            # Request a connection from the queue.\n            timeout_obj = self._get_timeout(timeout)\n            conn = self._get_conn(timeout=pool_timeout)\n    \n            conn.timeout = timeout_obj.connect_timeout\n    \n            is_new_proxy_conn = self.proxy is not None and not getattr(\n                conn, &amp;quot;sock&amp;quot;, None\n            )\n            if is_new_proxy_conn and http_tunnel_required:\n                self._prepare_proxy(conn)\n    \n            # Make the request on the httplib connection object.\n&amp;gt;           httplib_response = self._make_request(\n                conn,\n                method,\n                url,\n                timeout=timeout_obj,\n                body=body,\n                headers=headers,\n                chunked=chunked,\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:703: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:398: in _make_request\n    conn.request(method, url, **httplib_request_kw)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:239: in request\n    super(HTTPConnection, self).request(method, url, body=body, headers=headers)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1282: in request\n    self._send_request(method, url, body, headers, encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1328: in _send_request\n    self.endheaders(body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1277: in endheaders\n    self._send_output(message_body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1037: in _send_output\n    self.send(msg)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:975: in send\n    self.connect()\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:205: in connect\n    conn = self._new_conn()\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927E5AB90&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n            conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n    \n        except SocketTimeout:\n            raise ConnectTimeoutError(\n                self,\n                &amp;quot;Connection to %s timed out. (connect timeout=%s)&amp;quot;\n                % (self.host, self.timeout),\n            )\n    \n        except SocketError as e:\n&amp;gt;           raise NewConnectionError(\n                self, &amp;quot;Failed to establish a new connection: %s&amp;quot; % e\n            )\nE           urllib3.exceptions.NewConnectionError: &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927E5AB90&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:186: NewConnectionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927E592D0&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n&amp;gt;               resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:489: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:787: in urlopen\n    retries = retries.increment(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = Retry(total=0, connect=None, read=False, redirect=None, status=None), method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, response = None\nerror = NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927E5AB90&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;)\n_pool = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927E5AF90&amp;gt;, _stacktrace = &amp;lt;traceback object at 0x0000023927E59640&amp;gt;\n\n    def increment(\n        self,\n        method=None,\n        url=None,\n        response=None,\n        error=None,\n        _pool=None,\n        _stacktrace=None,\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Return a new Retry object with incremented retry counters.\n    \n        :param response: A response object, or None, if the server did not\n            return a response.\n        :type response: :class:`~urllib3.response.HTTPResponse`\n        :param Exception error: An error encountered during the request, or\n            None if the response was received successfully.\n    \n        :return: A new ``Retry`` object.\n        &amp;quot;&amp;quot;&amp;quot;\n        if self.total is False and error:\n            # Disabled, indicate to re-raise the error.\n            raise six.reraise(type(error), error, _stacktrace)\n    \n        total = self.total\n        if total is not None:\n            total -= 1\n    \n        connect = self.connect\n        read = self.read\n        redirect = self.redirect\n        status_count = self.status\n        other = self.other\n        cause = &amp;quot;unknown&amp;quot;\n        status = None\n        redirect_location = None\n    \n        if error and self._is_connection_error(error):\n            # Connect retry?\n            if connect is False:\n                raise six.reraise(type(error), error, _stacktrace)\n            elif connect is not None:\n                connect -= 1\n    \n        elif error and self._is_read_error(error):\n            # Read retry?\n            if read is False or not self._is_method_retryable(method):\n                raise six.reraise(type(error), error, _stacktrace)\n            elif read is not None:\n                read -= 1\n    \n        elif error:\n            # Other retry?\n            if other is not None:\n                other -= 1\n    \n        elif response and response.get_redirect_location():\n            # Redirect retry?\n            if redirect is not None:\n                redirect -= 1\n            cause = &amp;quot;too many redirects&amp;quot;\n            redirect_location = response.get_redirect_location()\n            status = response.status\n    \n        else:\n            # Incrementing because of a server error like a 500 in\n            # status_forcelist and the given method is in the allowed_methods\n            cause = ResponseError.GENERIC_ERROR\n            if response and response.status:\n                if status_count is not None:\n                    status_count -= 1\n                cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status)\n                status = response.status\n    \n        history = self.history + (\n            RequestHistory(method, url, error, status, redirect_location),\n        )\n    \n        new_retry = self.new(\n            total=total,\n            connect=connect,\n            read=read,\n            redirect=redirect,\n            status=status_count,\n            other=other,\n            history=history,\n        )\n    \n        if new_retry.is_exhausted():\n&amp;gt;           raise MaxRetryError(_pool, url, error or ResponseError(cause))\nE           urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927E5AB90&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\retry.py:592: MaxRetryError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;scripts.test_ihrm_login_params.TestIhrmLoginParams object at 0x00000239272AF910&amp;gt;, desc = &amp;#x27;\u5c11\u53c2&amp;#x27;, req_data = {&amp;#x27;mobile&amp;#x27;: &amp;#x27;13800000002&amp;#x27;}, status_code = 200, success = False\ncode = 20001, message = &amp;#x27;\u7528\u6237\u540d\u6216\u5bc6\u7801\u9519\u8bef&amp;#x27;\n\n    @pytest.mark.parametrize(&amp;quot;desc, req_data, status_code, success, code, message&amp;quot;, data)\n    # \u5b9a\u4e49 \u901a\u7528\u6d4b\u8bd5\u65b9\u6cd5 - \u6d4b\u8bd5ihrm\u767b\u5f55\u63a5\u53e3\n    def test_ihrm_login(self, desc, req_data, status_code, success, code, message):\n        # \u8c03\u7528 \u81ea\u5df1\u5c01\u88c5\u7684 api\uff0c \u83b7\u53d6\u54cd\u5e94\u7ed3\u679c\n&amp;gt;       resp = IhrmLoginApi.login(req_data)\n\nscripts\\test_ihrm_login_params.py:20: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\napi\\ihrm_login_api.py:12: in login\n    resp = requests.post(url=&amp;quot;http://ihrm-test.itheima.net/api/sys/login&amp;quot;, json=req_data)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:115: in post\n    return request(&amp;quot;post&amp;quot;, url, data=data, json=json, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:59: in request\n    return session.request(method=method, url=url, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:587: in request\n    resp = self.send(prep, **send_kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:701: in send\n    r = adapter.send(request, **kwargs)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927E592D0&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n                resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n    \n            # Send the request.\n            else:\n                if hasattr(conn, &amp;quot;proxy_pool&amp;quot;):\n                    conn = conn.proxy_pool\n    \n                low_conn = conn._get_conn(timeout=DEFAULT_POOL_TIMEOUT)\n    \n                try:\n                    skip_host = &amp;quot;Host&amp;quot; in request.headers\n                    low_conn.putrequest(\n                        request.method,\n                        url,\n                        skip_accept_encoding=True,\n                        skip_host=skip_host,\n                    )\n    \n                    for header, value in request.headers.items():\n                        low_conn.putheader(header, value)\n    \n                    low_conn.endheaders()\n    \n                    for i in request.body:\n                        low_conn.send(hex(len(i))[2:].encode(&amp;quot;utf-8&amp;quot;))\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                        low_conn.send(i)\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                    low_conn.send(b&amp;quot;0\\r\\n\\r\\n&amp;quot;)\n    \n                    # Receive the response from the server\n                    r = low_conn.getresponse()\n    \n                    resp = HTTPResponse.from_httplib(\n                        r,\n                        pool=conn,\n                        connection=low_conn,\n                        preload_content=False,\n                        decode_content=False,\n                    )\n                except Exception:\n                    # If we hit any problems here, clean up the connection.\n                    # Then, raise so that we can handle the actual exception.\n                    low_conn.close()\n                    raise\n    \n        except (ProtocolError, OSError) as err:\n            raise ConnectionError(err, request=request)\n    \n        except MaxRetryError as e:\n            if isinstance(e.reason, ConnectTimeoutError):\n                # TODO: Remove this in 3.0.0: see #2811\n                if not isinstance(e.reason, NewConnectionError):\n                    raise ConnectTimeout(e, request=request)\n    \n            if isinstance(e.reason, ResponseError):\n                raise RetryError(e, request=request)\n    \n            if isinstance(e.reason, _ProxyError):\n                raise ProxyError(e, request=request)\n    \n            if isinstance(e.reason, _SSLError):\n                # This branch is for urllib3 v1.22 and later.\n                raise SSLError(e, request=request)\n    \n&amp;gt;           raise ConnectionError(e, request=request)\nE           requests.exceptions.ConnectionError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927E5AB90&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:565: ConnectionError\n\n------------------------------ Captured log call -------------------------------\nDEBUG    urllib3.connectionpool:connectionpool.py:228 Starting new HTTP connection (1): ihrm-test.itheima.net:80\n\n&#34;}], &#34;scripts/test_ihrm_login_params.py::TestIhrmLoginParams::test_ihrm_login[\\u65e0\\u53c2-None-200-False-99999-\\u62b1\\u6b49\\uff0c\\u7cfb\\u7edf\\u7e41\\u5fd9\\uff0c\\u8bf7\\u7a0d\\u540e\\u91cd\\u8bd5\\uff01]&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Failed&#34;, &#34;testId&#34;: &#34;scripts/test_ihrm_login_params.py::TestIhrmLoginParams::test_ihrm_login[\\u65e0\\u53c2-None-200-False-99999-\\u62b1\\u6b49\\uff0c\\u7cfb\\u7edf\\u7e41\\u5fd9\\uff0c\\u8bf7\\u7a0d\\u540e\\u91cd\\u8bd5\\uff01]&#34;, &#34;duration&#34;: &#34;45 ms&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Failed&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;scripts/test_ihrm_login_params.py::TestIhrmLoginParams::test_ihrm_login[\\u65e0\\u53c2-None-200-False-99999-\\u62b1\\u6b49\\uff0c\\u7cfb\\u7edf\\u7e41\\u5fd9\\uff0c\\u8bf7\\u7a0d\\u540e\\u91cd\\u8bd5\\uff01]&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;45 ms&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;self = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927CE49D0&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n&amp;gt;           conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:174: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\connection.py:72: in create_connection\n    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nhost = &amp;#x27;ihrm-test.itheima.net&amp;#x27;, port = 80, family = &amp;lt;AddressFamily.AF_UNSPEC: 0&amp;gt;, type = &amp;lt;SocketKind.SOCK_STREAM: 1&amp;gt;, proto = 0, flags = 0\n\n    def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):\n        &amp;quot;&amp;quot;&amp;quot;Resolve host and port into list of address info entries.\n    \n        Translate the host/port argument into a sequence of 5-tuples that contain\n        all the necessary arguments for creating a socket connected to that service.\n        host is a domain name, a string representation of an IPv4/v6 address or\n        None. port is a string service name such as &amp;#x27;http&amp;#x27;, a numeric port number or\n        None. By passing None as the value of host and port, you can pass NULL to\n        the underlying C API.\n    \n        The family, type and proto arguments can be optionally specified in order to\n        narrow the list of addresses returned. Passing zero as a value for each of\n        these arguments selects the full range of results.\n        &amp;quot;&amp;quot;&amp;quot;\n        # We override this function since we want to translate the numeric family\n        # and socket type values to enum constants.\n        addrlist = []\n&amp;gt;       for res in _socket.getaddrinfo(host, port, family, type, proto, flags):\nE       socket.gaierror: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\socket.py:962: gaierror\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927CE4CD0&amp;gt;, method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, body = None\nheaders = {&amp;#x27;User-Agent&amp;#x27;: &amp;#x27;python-requests/2.28.1&amp;#x27;, &amp;#x27;Accept-Encoding&amp;#x27;: &amp;#x27;gzip, deflate&amp;#x27;, &amp;#x27;Accept&amp;#x27;: &amp;#x27;*/*&amp;#x27;, &amp;#x27;Connection&amp;#x27;: &amp;#x27;keep-alive&amp;#x27;, &amp;#x27;Content-Length&amp;#x27;: &amp;#x27;0&amp;#x27;}\nretries = Retry(total=0, connect=None, read=False, redirect=None, status=None), redirect = False, assert_same_host = False, timeout = Timeout(connect=None, read=None, total=None)\npool_timeout = None, release_conn = False, chunked = False, body_pos = None, response_kw = {&amp;#x27;decode_content&amp;#x27;: False, &amp;#x27;preload_content&amp;#x27;: False}\nparsed_url = Url(scheme=None, auth=None, host=None, port=None, path=&amp;#x27;/api/sys/login&amp;#x27;, query=None, fragment=None), destination_scheme = None, conn = None, release_this_conn = True\nhttp_tunnel_required = False, err = None, clean_exit = False\n\n    def urlopen(\n        self,\n        method,\n        url,\n        body=None,\n        headers=None,\n        retries=None,\n        redirect=True,\n        assert_same_host=True,\n        timeout=_Default,\n        pool_timeout=None,\n        release_conn=None,\n        chunked=False,\n        body_pos=None,\n        **response_kw\n    ):\n        &amp;quot;&amp;quot;&amp;quot;\n        Get a connection from the pool and perform an HTTP request. This is the\n        lowest level call for making a request, so you&amp;#x27;ll need to specify all\n        the raw details.\n    \n        .. note::\n    \n           More commonly, it&amp;#x27;s appropriate to use a convenience method provided\n           by :class:`.RequestMethods`, such as :meth:`request`.\n    \n        .. note::\n    \n           `release_conn` will only behave as expected if\n           `preload_content=False` because we want to make\n           `preload_content=False` the default behaviour someday soon without\n           breaking backwards compatibility.\n    \n        :param method:\n            HTTP request method (such as GET, POST, PUT, etc.)\n    \n        :param url:\n            The URL to perform the request on.\n    \n        :param body:\n            Data to send in the request body, either :class:`str`, :class:`bytes`,\n            an iterable of :class:`str`/:class:`bytes`, or a file-like object.\n    \n        :param headers:\n            Dictionary of custom headers to send, such as User-Agent,\n            If-None-Match, etc. If None, pool headers are used. If provided,\n            these headers completely replace any pool-specific headers.\n    \n        :param retries:\n            Configure the number of retries to allow before raising a\n            :class:`~urllib3.exceptions.MaxRetryError` exception.\n    \n            Pass ``None`` to retry until you receive a response. Pass a\n            :class:`~urllib3.util.retry.Retry` object for fine-grained control\n            over different types of retries.\n            Pass an integer number to retry connection errors that many times,\n            but no other types of errors. Pass zero to never retry.\n    \n            If ``False``, then retries are disabled and any exception is raised\n            immediately. Also, instead of raising a MaxRetryError on redirects,\n            the redirect response will be returned.\n    \n        :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.\n    \n        :param redirect:\n            If True, automatically handle redirects (status codes 301, 302,\n            303, 307, 308). Each redirect counts as a retry. Disabling retries\n            will disable redirect, too.\n    \n        :param assert_same_host:\n            If ``True``, will make sure that the host of the pool requests is\n            consistent else will raise HostChangedError. When ``False``, you can\n            use the pool on an HTTP proxy and request foreign hosts.\n    \n        :param timeout:\n            If specified, overrides the default timeout for this one\n            request. It may be a float (in seconds) or an instance of\n            :class:`urllib3.util.Timeout`.\n    \n        :param pool_timeout:\n            If set and the pool is set to block=True, then this method will\n            block for ``pool_timeout`` seconds and raise EmptyPoolError if no\n            connection is available within the time period.\n    \n        :param release_conn:\n            If False, then the urlopen call will not release the connection\n            back into the pool once a response is received (but will release if\n            you read the entire contents of the response such as when\n            `preload_content=True`). This is useful if you&amp;#x27;re not preloading\n            the response&amp;#x27;s content immediately. You will need to call\n            ``r.release_conn()`` on the response ``r`` to return the connection\n            back into the pool. If None, it takes the value of\n            ``response_kw.get(&amp;#x27;preload_content&amp;#x27;, True)``.\n    \n        :param chunked:\n            If True, urllib3 will send the body using chunked transfer\n            encoding. Otherwise, urllib3 will send the body using the standard\n            content-length form. Defaults to False.\n    \n        :param int body_pos:\n            Position to seek to in file-like body in the event of a retry or\n            redirect. Typically this won&amp;#x27;t need to be set because urllib3 will\n            auto-populate the value when needed.\n    \n        :param \\\\**response_kw:\n            Additional parameters are passed to\n            :meth:`urllib3.response.HTTPResponse.from_httplib`\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        parsed_url = parse_url(url)\n        destination_scheme = parsed_url.scheme\n    \n        if headers is None:\n            headers = self.headers\n    \n        if not isinstance(retries, Retry):\n            retries = Retry.from_int(retries, redirect=redirect, default=self.retries)\n    \n        if release_conn is None:\n            release_conn = response_kw.get(&amp;quot;preload_content&amp;quot;, True)\n    \n        # Check host\n        if assert_same_host and not self.is_same_host(url):\n            raise HostChangedError(self, url, retries)\n    \n        # Ensure that the URL we&amp;#x27;re connecting to is properly encoded\n        if url.startswith(&amp;quot;/&amp;quot;):\n            url = six.ensure_str(_encode_target(url))\n        else:\n            url = six.ensure_str(parsed_url.url)\n    \n        conn = None\n    \n        # Track whether `conn` needs to be released before\n        # returning/raising/recursing. Update this variable if necessary, and\n        # leave `release_conn` constant throughout the function. That way, if\n        # the function recurses, the original value of `release_conn` will be\n        # passed down into the recursive call, and its value will be respected.\n        #\n        # See issue #651 [1] for details.\n        #\n        # [1] &amp;lt;https://github.com/urllib3/urllib3/issues/651&amp;gt;\n        release_this_conn = release_conn\n    \n        http_tunnel_required = connection_requires_http_tunnel(\n            self.proxy, self.proxy_config, destination_scheme\n        )\n    \n        # Merge the proxy headers. Only done when not using HTTP CONNECT. We\n        # have to copy the headers dict so we can safely change it without those\n        # changes being reflected in anyone else&amp;#x27;s copy.\n        if not http_tunnel_required:\n            headers = headers.copy()\n            headers.update(self.proxy_headers)\n    \n        # Must keep the exception bound to a separate variable or else Python 3\n        # complains about UnboundLocalError.\n        err = None\n    \n        # Keep track of whether we cleanly exited the except block. This\n        # ensures we do proper cleanup in finally.\n        clean_exit = False\n    \n        # Rewind body position, if needed. Record current position\n        # for future rewinds in the event of a redirect/retry.\n        body_pos = set_file_position(body, body_pos)\n    \n        try:\n            # Request a connection from the queue.\n            timeout_obj = self._get_timeout(timeout)\n            conn = self._get_conn(timeout=pool_timeout)\n    \n            conn.timeout = timeout_obj.connect_timeout\n    \n            is_new_proxy_conn = self.proxy is not None and not getattr(\n                conn, &amp;quot;sock&amp;quot;, None\n            )\n            if is_new_proxy_conn and http_tunnel_required:\n                self._prepare_proxy(conn)\n    \n            # Make the request on the httplib connection object.\n&amp;gt;           httplib_response = self._make_request(\n                conn,\n                method,\n                url,\n                timeout=timeout_obj,\n                body=body,\n                headers=headers,\n                chunked=chunked,\n            )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:703: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:398: in _make_request\n    conn.request(method, url, **httplib_request_kw)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:239: in request\n    super(HTTPConnection, self).request(method, url, body=body, headers=headers)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1282: in request\n    self._send_request(method, url, body, headers, encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1328: in _send_request\n    self.endheaders(body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1277: in endheaders\n    self._send_output(message_body, encode_chunked=encode_chunked)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:1037: in _send_output\n    self.send(msg)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\http\\client.py:975: in send\n    self.connect()\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:205: in connect\n    conn = self._new_conn()\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927CE49D0&amp;gt;\n\n    def _new_conn(self):\n        &amp;quot;&amp;quot;&amp;quot;Establish a socket connection and set nodelay settings on it.\n    \n        :return: New socket connection.\n        &amp;quot;&amp;quot;&amp;quot;\n        extra_kw = {}\n        if self.source_address:\n            extra_kw[&amp;quot;source_address&amp;quot;] = self.source_address\n    \n        if self.socket_options:\n            extra_kw[&amp;quot;socket_options&amp;quot;] = self.socket_options\n    \n        try:\n            conn = connection.create_connection(\n                (self._dns_host, self.port), self.timeout, **extra_kw\n            )\n    \n        except SocketTimeout:\n            raise ConnectTimeoutError(\n                self,\n                &amp;quot;Connection to %s timed out. (connect timeout=%s)&amp;quot;\n                % (self.host, self.timeout),\n            )\n    \n        except SocketError as e:\n&amp;gt;           raise NewConnectionError(\n                self, &amp;quot;Failed to establish a new connection: %s&amp;quot; % e\n            )\nE           urllib3.exceptions.NewConnectionError: &amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927CE49D0&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connection.py:186: NewConnectionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927CE5510&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n&amp;gt;               resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:489: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\connectionpool.py:787: in urlopen\n    retries = retries.increment(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = Retry(total=0, connect=None, read=False, redirect=None, status=None), method = &amp;#x27;POST&amp;#x27;, url = &amp;#x27;/api/sys/login&amp;#x27;, response = None\nerror = NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927CE49D0&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;)\n_pool = &amp;lt;urllib3.connectionpool.HTTPConnectionPool object at 0x0000023927CE4CD0&amp;gt;, _stacktrace = &amp;lt;traceback object at 0x0000023927CE7A40&amp;gt;\n\n    def increment(\n        self,\n        method=None,\n        url=None,\n        response=None,\n        error=None,\n        _pool=None,\n        _stacktrace=None,\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Return a new Retry object with incremented retry counters.\n    \n        :param response: A response object, or None, if the server did not\n            return a response.\n        :type response: :class:`~urllib3.response.HTTPResponse`\n        :param Exception error: An error encountered during the request, or\n            None if the response was received successfully.\n    \n        :return: A new ``Retry`` object.\n        &amp;quot;&amp;quot;&amp;quot;\n        if self.total is False and error:\n            # Disabled, indicate to re-raise the error.\n            raise six.reraise(type(error), error, _stacktrace)\n    \n        total = self.total\n        if total is not None:\n            total -= 1\n    \n        connect = self.connect\n        read = self.read\n        redirect = self.redirect\n        status_count = self.status\n        other = self.other\n        cause = &amp;quot;unknown&amp;quot;\n        status = None\n        redirect_location = None\n    \n        if error and self._is_connection_error(error):\n            # Connect retry?\n            if connect is False:\n                raise six.reraise(type(error), error, _stacktrace)\n            elif connect is not None:\n                connect -= 1\n    \n        elif error and self._is_read_error(error):\n            # Read retry?\n            if read is False or not self._is_method_retryable(method):\n                raise six.reraise(type(error), error, _stacktrace)\n            elif read is not None:\n                read -= 1\n    \n        elif error:\n            # Other retry?\n            if other is not None:\n                other -= 1\n    \n        elif response and response.get_redirect_location():\n            # Redirect retry?\n            if redirect is not None:\n                redirect -= 1\n            cause = &amp;quot;too many redirects&amp;quot;\n            redirect_location = response.get_redirect_location()\n            status = response.status\n    \n        else:\n            # Incrementing because of a server error like a 500 in\n            # status_forcelist and the given method is in the allowed_methods\n            cause = ResponseError.GENERIC_ERROR\n            if response and response.status:\n                if status_count is not None:\n                    status_count -= 1\n                cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status)\n                status = response.status\n    \n        history = self.history + (\n            RequestHistory(method, url, error, status, redirect_location),\n        )\n    \n        new_retry = self.new(\n            total=total,\n            connect=connect,\n            read=read,\n            redirect=redirect,\n            status=status_count,\n            other=other,\n            history=history,\n        )\n    \n        if new_retry.is_exhausted():\n&amp;gt;           raise MaxRetryError(_pool, url, error or ResponseError(cause))\nE           urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927CE49D0&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\urllib3\\util\\retry.py:592: MaxRetryError\n\nDuring handling of the above exception, another exception occurred:\n\nself = &amp;lt;scripts.test_ihrm_login_params.TestIhrmLoginParams object at 0x00000239272AFAD0&amp;gt;, desc = &amp;#x27;\u65e0\u53c2&amp;#x27;, req_data = None, status_code = 200, success = False, code = 99999\nmessage = &amp;#x27;\u62b1\u6b49\uff0c\u7cfb\u7edf\u7e41\u5fd9\uff0c\u8bf7\u7a0d\u540e\u91cd\u8bd5\uff01&amp;#x27;\n\n    @pytest.mark.parametrize(&amp;quot;desc, req_data, status_code, success, code, message&amp;quot;, data)\n    # \u5b9a\u4e49 \u901a\u7528\u6d4b\u8bd5\u65b9\u6cd5 - \u6d4b\u8bd5ihrm\u767b\u5f55\u63a5\u53e3\n    def test_ihrm_login(self, desc, req_data, status_code, success, code, message):\n        # \u8c03\u7528 \u81ea\u5df1\u5c01\u88c5\u7684 api\uff0c \u83b7\u53d6\u54cd\u5e94\u7ed3\u679c\n&amp;gt;       resp = IhrmLoginApi.login(req_data)\n\nscripts\\test_ihrm_login_params.py:20: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\napi\\ihrm_login_api.py:12: in login\n    resp = requests.post(url=&amp;quot;http://ihrm-test.itheima.net/api/sys/login&amp;quot;, json=req_data)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:115: in post\n    return request(&amp;quot;post&amp;quot;, url, data=data, json=json, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\api.py:59: in request\n    return session.request(method=method, url=url, **kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:587: in request\n    resp = self.send(prep, **send_kwargs)\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\sessions.py:701: in send\n    r = adapter.send(request, **kwargs)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = &amp;lt;requests.adapters.HTTPAdapter object at 0x0000023927CE5510&amp;gt;, request = &amp;lt;PreparedRequest [POST]&amp;gt;, stream = False, timeout = Timeout(connect=None, read=None, total=None)\nverify = True, cert = None, proxies = OrderedDict()\n\n    def send(\n        self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None\n    ):\n        &amp;quot;&amp;quot;&amp;quot;Sends PreparedRequest object. Returns Response object.\n    \n        :param request: The :class:`PreparedRequest &amp;lt;PreparedRequest&amp;gt;` being sent.\n        :param stream: (optional) Whether to stream the request content.\n        :param timeout: (optional) How long to wait for the server to send\n            data before giving up, as a float, or a :ref:`(connect timeout,\n            read timeout) &amp;lt;timeouts&amp;gt;` tuple.\n        :type timeout: float or tuple or urllib3 Timeout object\n        :param verify: (optional) Either a boolean, in which case it controls whether\n            we verify the server&amp;#x27;s TLS certificate, or a string, in which case it\n            must be a path to a CA bundle to use\n        :param cert: (optional) Any user-provided SSL certificate to be trusted.\n        :param proxies: (optional) The proxies dictionary to apply to the request.\n        :rtype: requests.Response\n        &amp;quot;&amp;quot;&amp;quot;\n    \n        try:\n            conn = self.get_connection(request.url, proxies)\n        except LocationValueError as e:\n            raise InvalidURL(e, request=request)\n    \n        self.cert_verify(conn, request.url, verify, cert)\n        url = self.request_url(request, proxies)\n        self.add_headers(\n            request,\n            stream=stream,\n            timeout=timeout,\n            verify=verify,\n            cert=cert,\n            proxies=proxies,\n        )\n    \n        chunked = not (request.body is None or &amp;quot;Content-Length&amp;quot; in request.headers)\n    \n        if isinstance(timeout, tuple):\n            try:\n                connect, read = timeout\n                timeout = TimeoutSauce(connect=connect, read=read)\n            except ValueError:\n                raise ValueError(\n                    f&amp;quot;Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, &amp;quot;\n                    f&amp;quot;or a single float to set both timeouts to the same value.&amp;quot;\n                )\n        elif isinstance(timeout, TimeoutSauce):\n            pass\n        else:\n            timeout = TimeoutSauce(connect=timeout, read=timeout)\n    \n        try:\n            if not chunked:\n                resp = conn.urlopen(\n                    method=request.method,\n                    url=url,\n                    body=request.body,\n                    headers=request.headers,\n                    redirect=False,\n                    assert_same_host=False,\n                    preload_content=False,\n                    decode_content=False,\n                    retries=self.max_retries,\n                    timeout=timeout,\n                )\n    \n            # Send the request.\n            else:\n                if hasattr(conn, &amp;quot;proxy_pool&amp;quot;):\n                    conn = conn.proxy_pool\n    \n                low_conn = conn._get_conn(timeout=DEFAULT_POOL_TIMEOUT)\n    \n                try:\n                    skip_host = &amp;quot;Host&amp;quot; in request.headers\n                    low_conn.putrequest(\n                        request.method,\n                        url,\n                        skip_accept_encoding=True,\n                        skip_host=skip_host,\n                    )\n    \n                    for header, value in request.headers.items():\n                        low_conn.putheader(header, value)\n    \n                    low_conn.endheaders()\n    \n                    for i in request.body:\n                        low_conn.send(hex(len(i))[2:].encode(&amp;quot;utf-8&amp;quot;))\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                        low_conn.send(i)\n                        low_conn.send(b&amp;quot;\\r\\n&amp;quot;)\n                    low_conn.send(b&amp;quot;0\\r\\n\\r\\n&amp;quot;)\n    \n                    # Receive the response from the server\n                    r = low_conn.getresponse()\n    \n                    resp = HTTPResponse.from_httplib(\n                        r,\n                        pool=conn,\n                        connection=low_conn,\n                        preload_content=False,\n                        decode_content=False,\n                    )\n                except Exception:\n                    # If we hit any problems here, clean up the connection.\n                    # Then, raise so that we can handle the actual exception.\n                    low_conn.close()\n                    raise\n    \n        except (ProtocolError, OSError) as err:\n            raise ConnectionError(err, request=request)\n    \n        except MaxRetryError as e:\n            if isinstance(e.reason, ConnectTimeoutError):\n                # TODO: Remove this in 3.0.0: see #2811\n                if not isinstance(e.reason, NewConnectionError):\n                    raise ConnectTimeout(e, request=request)\n    \n            if isinstance(e.reason, ResponseError):\n                raise RetryError(e, request=request)\n    \n            if isinstance(e.reason, _ProxyError):\n                raise ProxyError(e, request=request)\n    \n            if isinstance(e.reason, _SSLError):\n                # This branch is for urllib3 v1.22 and later.\n                raise SSLError(e, request=request)\n    \n&amp;gt;           raise ConnectionError(e, request=request)\nE           requests.exceptions.ConnectionError: HTTPConnectionPool(host=&amp;#x27;ihrm-test.itheima.net&amp;#x27;, port=80): Max retries exceeded with url: /api/sys/login (Caused by NewConnectionError(&amp;#x27;&amp;lt;urllib3.connection.HTTPConnection object at 0x0000023927CE49D0&amp;gt;: Failed to establish a new connection: [Errno 11001] getaddrinfo failed&amp;#x27;))\n\n..\\..\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\requests\\adapters.py:565: ConnectionError\n\n------------------------------ Captured log call -------------------------------\nDEBUG    urllib3.connectionpool:connectionpool.py:228 Starting new HTTP connection (1): ihrm-test.itheima.net:80\n\n&#34;}]}, &#34;renderCollapsed&#34;: [&#34;passed&#34;], &#34;initialSort&#34;: &#34;result&#34;, &#34;title&#34;: &#34;ihrmReport.html&#34;}"></div>
    <script>
      (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
const { getCollapsedCategory, setCollapsedIds } = require('./storage.js')

class DataManager {
    setManager(data) {
        const collapsedCategories = [...getCollapsedCategory(data.renderCollapsed)]
        const collapsedIds = []
        const tests = Object.values(data.tests).flat().map((test, index) => {
            const collapsed = collapsedCategories.includes(test.result.toLowerCase())
            const id = `test_${index}`
            if (collapsed) {
                collapsedIds.push(id)
            }
            return {
                ...test,
                id,
                collapsed,
            }
        })
        const dataBlob = { ...data, tests }
        this.data = { ...dataBlob }
        this.renderData = { ...dataBlob }
        setCollapsedIds(collapsedIds)
    }

    get allData() {
        return { ...this.data }
    }

    resetRender() {
        this.renderData = { ...this.data }
    }

    setRender(data) {
        this.renderData.tests = [...data]
    }

    toggleCollapsedItem(id) {
        this.renderData.tests = this.renderData.tests.map((test) =>
            test.id === id ? { ...test, collapsed: !test.collapsed } : test,
        )
    }

    set allCollapsed(collapsed) {
        this.renderData = { ...this.renderData, tests: [...this.renderData.tests.map((test) => (
            { ...test, collapsed }
        ))] }
    }

    get testSubset() {
        return [...this.renderData.tests]
    }

    get environment() {
        return this.renderData.environment
    }

    get initialSort() {
        return this.data.initialSort
    }
}

module.exports = {
    manager: new DataManager(),
}

},{"./storage.js":8}],2:[function(require,module,exports){
const mediaViewer = require('./mediaviewer.js')
const templateEnvRow = document.getElementById('template_environment_row')
const templateResult = document.getElementById('template_results-table__tbody')

function htmlToElements(html) {
    const temp = document.createElement('template')
    temp.innerHTML = html
    return temp.content.childNodes
}

const find = (selector, elem) => {
    if (!elem) {
        elem = document
    }
    return elem.querySelector(selector)
}

const findAll = (selector, elem) => {
    if (!elem) {
        elem = document
    }
    return [...elem.querySelectorAll(selector)]
}

const dom = {
    getStaticRow: (key, value) => {
        const envRow = templateEnvRow.content.cloneNode(true)
        const isObj = typeof value === 'object' && value !== null
        const values = isObj ? Object.keys(value).map((k) => `${k}: ${value[k]}`) : null

        const valuesElement = htmlToElements(
            values ? `<ul>${values.map((val) => `<li>${val}</li>`).join('')}<ul>` : `<div>${value}</div>`)[0]
        const td = findAll('td', envRow)
        td[0].textContent = key
        td[1].appendChild(valuesElement)

        return envRow
    },
    getResultTBody: ({ testId, id, log, extras, resultsTableRow, tableHtml, result, collapsed }) => {
        const resultBody = templateResult.content.cloneNode(true)
        resultBody.querySelector('tbody').classList.add(result.toLowerCase())
        resultBody.querySelector('tbody').id = testId
        resultBody.querySelector('.collapsible').dataset.id = id

        resultsTableRow.forEach((html) => {
            const t = document.createElement('template')
            t.innerHTML = html
            resultBody.querySelector('.collapsible').appendChild(t.content)
        })

        if (log) {
            // Wrap lines starting with "E" with span.error to color those lines red
            const wrappedLog = log.replace(/^E.*$/gm, (match) => `<span class="error">${match}</span>`)
            resultBody.querySelector('.log').innerHTML = wrappedLog
        } else {
            resultBody.querySelector('.log').remove()
        }

        if (collapsed) {
            resultBody.querySelector('.collapsible > td')?.classList.add('collapsed')
            resultBody.querySelector('.extras-row').classList.add('hidden')
        } else {
            resultBody.querySelector('.collapsible > td')?.classList.remove('collapsed')
        }

        const media = []
        extras?.forEach(({ name, format_type, content }) => {
            if (['image', 'video'].includes(format_type)) {
                media.push({ path: content, name, format_type })
            }

            if (format_type === 'html') {
                resultBody.querySelector('.extraHTML').insertAdjacentHTML('beforeend', `<div>${content}</div>`)
            }
        })
        mediaViewer.setup(resultBody, media)

        // Add custom html from the pytest_html_results_table_html hook
        tableHtml?.forEach((item) => {
            resultBody.querySelector('td[class="extra"]').insertAdjacentHTML('beforeend', item)
        })

        return resultBody
    },
}

module.exports = {
    dom,
    htmlToElements,
    find,
    findAll,
}

},{"./mediaviewer.js":6}],3:[function(require,module,exports){
const { manager } = require('./datamanager.js')
const { doSort } = require('./sort.js')
const storageModule = require('./storage.js')

const getFilteredSubSet = (filter) =>
    manager.allData.tests.filter(({ result }) => filter.includes(result.toLowerCase()))

const doInitFilter = () => {
    const currentFilter = storageModule.getVisible()
    const filteredSubset = getFilteredSubSet(currentFilter)
    manager.setRender(filteredSubset)
}

const doFilter = (type, show) => {
    if (show) {
        storageModule.showCategory(type)
    } else {
        storageModule.hideCategory(type)
    }

    const currentFilter = storageModule.getVisible()
    const filteredSubset = getFilteredSubSet(currentFilter)
    manager.setRender(filteredSubset)

    const sortColumn = storageModule.getSort()
    doSort(sortColumn, true)
}

module.exports = {
    doFilter,
    doInitFilter,
}

},{"./datamanager.js":1,"./sort.js":7,"./storage.js":8}],4:[function(require,module,exports){
const { redraw, bindEvents, renderStatic } = require('./main.js')
const { doInitFilter } = require('./filter.js')
const { doInitSort } = require('./sort.js')
const { manager } = require('./datamanager.js')
const data = JSON.parse(document.getElementById('data-container').dataset.jsonblob)

function init() {
    manager.setManager(data)
    doInitFilter()
    doInitSort()
    renderStatic()
    redraw()
    bindEvents()
}

init()

},{"./datamanager.js":1,"./filter.js":3,"./main.js":5,"./sort.js":7}],5:[function(require,module,exports){
const { dom, find, findAll } = require('./dom.js')
const { manager } = require('./datamanager.js')
const { doSort } = require('./sort.js')
const { doFilter } = require('./filter.js')
const {
    getVisible,
    getCollapsedIds,
    setCollapsedIds,
    getSort,
    getSortDirection,
    possibleFilters,
} = require('./storage.js')

const removeChildren = (node) => {
    while (node.firstChild) {
        node.removeChild(node.firstChild)
    }
}

const renderStatic = () => {
    const renderEnvironmentTable = () => {
        const environment = manager.environment
        const rows = Object.keys(environment).map((key) => dom.getStaticRow(key, environment[key]))
        const table = document.getElementById('environment')
        removeChildren(table)
        rows.forEach((row) => table.appendChild(row))
    }
    renderEnvironmentTable()
}

const addItemToggleListener = (elem) => {
    elem.addEventListener('click', ({ target }) => {
        const id = target.parentElement.dataset.id
        manager.toggleCollapsedItem(id)

        const collapsedIds = getCollapsedIds()
        if (collapsedIds.includes(id)) {
            const updated = collapsedIds.filter((item) => item !== id)
            setCollapsedIds(updated)
        } else {
            collapsedIds.push(id)
            setCollapsedIds(collapsedIds)
        }
        redraw()
    })
}

const renderContent = (tests) => {
    const sortAttr = getSort(manager.initialSort)
    const sortAsc = JSON.parse(getSortDirection())
    const rows = tests.map(dom.getResultTBody)
    const table = document.getElementById('results-table')
    const tableHeader = document.getElementById('results-table-head')

    const newTable = document.createElement('table')
    newTable.id = 'results-table'

    // remove all sorting classes and set the relevant
    findAll('.sortable', tableHeader).forEach((elem) => elem.classList.remove('asc', 'desc'))
    tableHeader.querySelector(`.sortable[data-column-type="${sortAttr}"]`)?.classList.add(sortAsc ? 'desc' : 'asc')
    newTable.appendChild(tableHeader)

    if (!rows.length) {
        const emptyTable = document.getElementById('template_results-table__body--empty').content.cloneNode(true)
        newTable.appendChild(emptyTable)
    } else {
        rows.forEach((row) => {
            if (!!row) {
                findAll('.collapsible td:not(.col-links', row).forEach(addItemToggleListener)
                find('.logexpander', row).addEventListener('click',
                    (evt) => evt.target.parentNode.classList.toggle('expanded'),
                )
                newTable.appendChild(row)
            }
        })
    }

    table.replaceWith(newTable)
}

const renderDerived = () => {
    const currentFilter = getVisible()
    possibleFilters.forEach((result) => {
        const input = document.querySelector(`input[data-test-result="${result}"]`)
        input.checked = currentFilter.includes(result)
    })
}

const bindEvents = () => {
    const filterColumn = (evt) => {
        const { target: element } = evt
        const { testResult } = element.dataset

        doFilter(testResult, element.checked)
        const collapsedIds = getCollapsedIds()
        const updated = manager.renderData.tests.map((test) => {
            return {
                ...test,
                collapsed: collapsedIds.includes(test.id),
            }
        })
        manager.setRender(updated)
        redraw()
    }

    const header = document.getElementById('environment-header')
    header.addEventListener('click', () => {
        const table = document.getElementById('environment')
        table.classList.toggle('hidden')
        header.classList.toggle('collapsed')
    })

    findAll('input[name="filter_checkbox"]').forEach((elem) => {
        elem.addEventListener('click', filterColumn)
    })

    findAll('.sortable').forEach((elem) => {
        elem.addEventListener('click', (evt) => {
            const { target: element } = evt
            const { columnType } = element.dataset
            doSort(columnType)
            redraw()
        })
    })

    document.getElementById('show_all_details').addEventListener('click', () => {
        manager.allCollapsed = false
        setCollapsedIds([])
        redraw()
    })
    document.getElementById('hide_all_details').addEventListener('click', () => {
        manager.allCollapsed = true
        const allIds = manager.renderData.tests.map((test) => test.id)
        setCollapsedIds(allIds)
        redraw()
    })
}

const redraw = () => {
    const { testSubset } = manager

    renderContent(testSubset)
    renderDerived()
}

module.exports = {
    redraw,
    bindEvents,
    renderStatic,
}

},{"./datamanager.js":1,"./dom.js":2,"./filter.js":3,"./sort.js":7,"./storage.js":8}],6:[function(require,module,exports){
class MediaViewer {
    constructor(assets) {
        this.assets = assets
        this.index = 0
    }

    nextActive() {
        this.index = this.index === this.assets.length - 1 ? 0 : this.index + 1
        return [this.activeFile, this.index]
    }

    prevActive() {
        this.index = this.index === 0 ? this.assets.length - 1 : this.index -1
        return [this.activeFile, this.index]
    }

    get currentIndex() {
        return this.index
    }

    get activeFile() {
        return this.assets[this.index]
    }
}


const setup = (resultBody, assets) => {
    if (!assets.length) {
        resultBody.querySelector('.media').classList.add('hidden')
        return
    }

    const mediaViewer = new MediaViewer(assets)
    const container = resultBody.querySelector('.media-container')
    const leftArrow = resultBody.querySelector('.media-container__nav--left')
    const rightArrow = resultBody.querySelector('.media-container__nav--right')
    const mediaName = resultBody.querySelector('.media__name')
    const counter = resultBody.querySelector('.media__counter')
    const imageEl = resultBody.querySelector('img')
    const sourceEl = resultBody.querySelector('source')
    const videoEl = resultBody.querySelector('video')

    const setImg = (media, index) => {
        if (media?.format_type === 'image') {
            imageEl.src = media.path

            imageEl.classList.remove('hidden')
            videoEl.classList.add('hidden')
        } else if (media?.format_type === 'video') {
            sourceEl.src = media.path

            videoEl.classList.remove('hidden')
            imageEl.classList.add('hidden')
        }

        mediaName.innerText = media?.name
        counter.innerText = `${index + 1} / ${assets.length}`
    }
    setImg(mediaViewer.activeFile, mediaViewer.currentIndex)

    const moveLeft = () => {
        const [media, index] = mediaViewer.prevActive()
        setImg(media, index)
    }
    const doRight = () => {
        const [media, index] = mediaViewer.nextActive()
        setImg(media, index)
    }
    const openImg = () => {
        window.open(mediaViewer.activeFile.path, '_blank')
    }
    if (assets.length === 1) {
        container.classList.add('media-container--fullscreen')
    } else {
        leftArrow.addEventListener('click', moveLeft)
        rightArrow.addEventListener('click', doRight)
    }
    imageEl.addEventListener('click', openImg)
}

module.exports = {
    setup,
}

},{}],7:[function(require,module,exports){
const { manager } = require('./datamanager.js')
const storageModule = require('./storage.js')

const genericSort = (list, key, ascending, customOrder) => {
    let sorted
    if (customOrder) {
        sorted = list.sort((a, b) => {
            const aValue = a.result.toLowerCase()
            const bValue = b.result.toLowerCase()

            const aIndex = customOrder.findIndex((item) => item.toLowerCase() === aValue)
            const bIndex = customOrder.findIndex((item) => item.toLowerCase() === bValue)

            // Compare the indices to determine the sort order
            return aIndex - bIndex
        })
    } else {
        sorted = list.sort((a, b) => a[key] === b[key] ? 0 : a[key] > b[key] ? 1 : -1)
    }

    if (ascending) {
        sorted.reverse()
    }
    return sorted
}

const durationSort = (list, ascending) => {
    const parseDuration = (duration) => {
        if (duration.includes(':')) {
            // If it's in the format "HH:mm:ss"
            const [hours, minutes, seconds] = duration.split(':').map(Number)
            return (hours * 3600 + minutes * 60 + seconds) * 1000
        } else {
            // If it's in the format "nnn ms"
            return parseInt(duration)
        }
    }
    const sorted = list.sort((a, b) => parseDuration(a['duration']) - parseDuration(b['duration']))
    if (ascending) {
        sorted.reverse()
    }
    return sorted
}

const doInitSort = () => {
    const type = storageModule.getSort(manager.initialSort)
    const ascending = storageModule.getSortDirection()
    const list = manager.testSubset
    const initialOrder = ['Error', 'Failed', 'Rerun', 'XFailed', 'XPassed', 'Skipped', 'Passed']

    storageModule.setSort(type)
    storageModule.setSortDirection(ascending)

    if (type?.toLowerCase() === 'original') {
        manager.setRender(list)
    } else {
        let sortedList
        switch (type) {
        case 'duration':
            sortedList = durationSort(list, ascending)
            break
        case 'result':
            sortedList = genericSort(list, type, ascending, initialOrder)
            break
        default:
            sortedList = genericSort(list, type, ascending)
            break
        }
        manager.setRender(sortedList)
    }
}

const doSort = (type, skipDirection) => {
    const newSortType = storageModule.getSort(manager.initialSort) !== type
    const currentAsc = storageModule.getSortDirection()
    let ascending
    if (skipDirection) {
        ascending = currentAsc
    } else {
        ascending = newSortType ? false : !currentAsc
    }
    storageModule.setSort(type)
    storageModule.setSortDirection(ascending)

    const list = manager.testSubset
    const sortedList = type === 'duration' ? durationSort(list, ascending) : genericSort(list, type, ascending)
    manager.setRender(sortedList)
}

module.exports = {
    doInitSort,
    doSort,
}

},{"./datamanager.js":1,"./storage.js":8}],8:[function(require,module,exports){
const possibleFilters = [
    'passed',
    'skipped',
    'failed',
    'error',
    'xfailed',
    'xpassed',
    'rerun',
]

const getVisible = () => {
    const url = new URL(window.location.href)
    const settings = new URLSearchParams(url.search).get('visible')
    const lower = (item) => {
        const lowerItem = item.toLowerCase()
        if (possibleFilters.includes(lowerItem)) {
            return lowerItem
        }
        return null
    }
    return settings === null ?
        possibleFilters :
        [...new Set(settings?.split(',').map(lower).filter((item) => item))]
}

const hideCategory = (categoryToHide) => {
    const url = new URL(window.location.href)
    const visibleParams = new URLSearchParams(url.search).get('visible')
    const currentVisible = visibleParams ? visibleParams.split(',') : [...possibleFilters]
    const settings = [...new Set(currentVisible)].filter((f) => f !== categoryToHide).join(',')

    url.searchParams.set('visible', settings)
    window.history.pushState({}, null, unescape(url.href))
}

const showCategory = (categoryToShow) => {
    if (typeof window === 'undefined') {
        return
    }
    const url = new URL(window.location.href)
    const currentVisible = new URLSearchParams(url.search).get('visible')?.split(',').filter(Boolean) ||
        [...possibleFilters]
    const settings = [...new Set([categoryToShow, ...currentVisible])]
    const noFilter = possibleFilters.length === settings.length || !settings.length

    noFilter ? url.searchParams.delete('visible') : url.searchParams.set('visible', settings.join(','))
    window.history.pushState({}, null, unescape(url.href))
}

const getSort = (initialSort) => {
    const url = new URL(window.location.href)
    let sort = new URLSearchParams(url.search).get('sort')
    if (!sort) {
        sort = initialSort || 'result'
    }
    return sort
}

const setSort = (type) => {
    const url = new URL(window.location.href)
    url.searchParams.set('sort', type)
    window.history.pushState({}, null, unescape(url.href))
}

const getCollapsedCategory = (renderCollapsed) => {
    let categories
    if (typeof window !== 'undefined') {
        const url = new URL(window.location.href)
        const collapsedItems = new URLSearchParams(url.search).get('collapsed')
        switch (true) {
        case !renderCollapsed && collapsedItems === null:
            categories = ['passed']
            break
        case collapsedItems?.length === 0 || /^["']{2}$/.test(collapsedItems):
            categories = []
            break
        case /^all$/.test(collapsedItems) || collapsedItems === null && /^all$/.test(renderCollapsed):
            categories = [...possibleFilters]
            break
        default:
            categories = collapsedItems?.split(',').map((item) => item.toLowerCase()) || renderCollapsed
            break
        }
    } else {
        categories = []
    }
    return categories
}

const getSortDirection = () => JSON.parse(sessionStorage.getItem('sortAsc')) || false
const setSortDirection = (ascending) => sessionStorage.setItem('sortAsc', ascending)

const getCollapsedIds = () => JSON.parse(sessionStorage.getItem('collapsedIds')) || []
const setCollapsedIds = (list) => sessionStorage.setItem('collapsedIds', JSON.stringify(list))

module.exports = {
    getVisible,
    hideCategory,
    showCategory,
    getCollapsedIds,
    setCollapsedIds,
    getSort,
    setSort,
    getSortDirection,
    setSortDirection,
    getCollapsedCategory,
    possibleFilters,
}

},{}]},{},[4]);
    </script>
  </footer>
</html>